实验六:优秀代码
2016-11-29 本文已影响207人
jzh123s
A : 找好人
题目描述:
某学校有四位同学中的一位做了好事,不留名,表扬信来了之后,校长问这四位是谁做的好事。四个人的回答分别是:
A说:不是我
B说:是C
C说:是D
D说:C胡说。
已知三人说的是真话,一个人说的是假话,现在编程求出做好事的到底是谁?
优秀代码
#include <stdio.h>
int main()
{
char A;
int X;
for(A='A';A<='D';A++)
{
X=(A!='A')+(A=='C')+(A=='D')+(A!='D');
if(X==3)
printf("%c\n",A);
}
}
B : 输出同时是素数与回文数的数据
题目描述
输出指定范围内的同时是素数与回文数的数据,如果没有,输出“Not found”
优秀代码
#include<stdio.h>
#include<math.h>
int main()
{
int sushu(int n);
int huiwen(int n);
int n,a,b,c,i;
scanf("%d",&n);
while(n--)
{
c=0;
scanf("%d%d",&a,&b);
for(i=a;i<=b;i++) {
if(sushu(i)&&huiwen(i)) {
printf("%d\n",i);
c=1;
}
}
if(c==0)
printf("Not found\n");
}
}
int sushu(int n)
{
int i,flag=1;
if(n==1 || n==0)
flag=0;
for(i=2;i<=sqrt(n);i++)
if(n%i==0) {
flag=0;
break;
}
return flag;
}
int huiwen(int n)
{
int p,k=0;
p=n;
while(p!=0)
{
k=k*10+p%10;
p/=10;
}
if(k==n)
return 1;
else
return 0;
}
点评 : 将判断素数和回文数的方法分离成了两个函数,使代码更加清晰。
C : 猴子吃桃
题目描述
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
优秀代码
#include<stdio.h>
int main()
{
int N,i,s=1;
scanf("%d",&N);
for (i=1;i<N;i++)
s=(s+1)*2;
printf("%d\n",s);
return 0;
}
D : 最强字母
题目描述
在英文字母王国中,大写字母比小写字母强大。在大写字母之间按字母表顺序,越靠前越大,例如A比B大,B比C大,Z在大写字母中最小。同样小写字母之间的比较也按字母表顺序,也是越靠前越大。
要求在一个英文字母集合中,选择最强大的字母。
优秀代码
#include<stdio.h>
#include<string.h>
int main()
{
int i=0;
char str[100],ch;
gets(str);
ch=str[0];
for(;i<strlen(str);i++)
{
if(str[i] < ch)
ch = str[i];
}
printf("%c\n",ch);
return 0;
}
点评 : 这题并不需要排序,直接找出最小值输出即可。
E : 在数组中查找元素
题目描述
定义一个大小为10的整型数组,让用户从键盘输入10个数据;然后让用户输入一个数据,在数组中查找该数据第一次出现的位置,找到了,输出该元素的下标,找不到,输出“Not found”。
优秀代码
#include <stdio.h>
int main()
{
int i,n,p;
int a[10],b;
scanf("%d",&n);
while(n--)
{
p=0;
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
scanf("%d",&b);
for(i=0;i<=9;i++)
if(b==a[i])
{
printf("%d\n",i);
p=1;
}
if(!p) printf("Not found\n");
}
return 0;
}
F:数组求同
题目描述
输入两个数组(数组元素个数6和8),输出在两个数组中都出现的元素(如a[6]={2,3,4,5,6,7},b[8]={3,5,7,9,11,13,15,19},则输出3、5、7)。
优秀代码
#include <stdio.h>
int main()
{
int i,j;
int a[6],b[8];
for(i=0;i<6;i++)
scanf("%d",&a[i]);
for(i=0;i<8;i++)
scanf("%d",&b[i]);
for(i=0;i<6;i++)
for(j=0;j<8;j++)
if(a[i]==b[j])
printf("%d\n",b[j]);
return 0;
}