1.
对于成绩的分段,分为五个等级。
此题相对简单,就是对于多组数据的不同情况讨论。
唯一要注意的地方是注意要多组数据输入而不是单个数据。
#include<stdio.h>
int main()
{
int t;
while(scanf("%d",&t)!=EOF)
{
if(t>=90&&t<=100)
{
printf("A");
printf("\n");
}
if(t>=80&&t<90)
{
printf("B");
printf("\n");
}
if(t>=70&&t<80)
{
printf("C");
printf("\n");
}
if(t>=60&&t<70)
{
printf("D");
printf("\n");
}
if(t>=0&&t<60)
{
printf("E");
printf("\n");
}
if(t<0||t>100)
{
printf("Score is error!");
printf("\n");
}
}
return 0;
}
2.
计算水仙花数,即一个三位数,其各位数字的立方和等于其本身。
此题应当先分别分出三个数,然后分别立方后相加,与原数比较。
应当注意格式,此题要求为在两数之间有空格而其他地方无空格,故应当分两种情况讨论。
#include<stdio.h>
int main()
{
int m,n,a,b,c,i,j=0;
while(scanf("%d %d",&m,&n)!=EOF)
{
for(i=m;i<=n;i++)
{
a=i/100;
b=i%100/10;
c=i%10;
if(a*a*a+b*b*b+c*c*c==i)
{
j++;
if(j==1)
{printf("%d",i);}
else
{printf(" %d",i);}
}
}
if(j==0)
{printf("no");}
j=0;
printf("\n");
}
return 0;
}
3.
求n个整数中所有奇数的乘积。
此题为在一组数据中找出数据并相乘,应当分条件讨论。
注意输入数据为多组。
#include<stdio.h>
int main()
{
int n,x,i,j=1;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&x);
if(x%2==1)
{
j=j*x;
}
}
printf("%d\n",j);
j=1;
}
return 0;
}
4.
对于(x,y)范围内的整数n取n^2+n+41,判定该表达式的值是否都为素数。
对于每个n,求出它的对应值,然后讨论是否为复数。
注意n不止一个。
#include<stdio.h>
int main()
{
int n,x,i,j=1;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&x);
if(x%2==1)
{
j=j*x;
}
}
printf("%d\n",j);
j=1;
}
return 0;
}
5.
1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ...求该多项式的前n项的和。
对于n中奇数与偶数分情况讨论,然后相加。
注意对于结果,一定确定其定义为float或者double,绝对不能定义为int。
#include<stdio.h>
int main()
{
int m,n,i,j;
float a=0.0;
while(scanf("%d",&m)!=EOF)
{
for(i=1;i<=m;i++)
{
scanf("%d",&n);
for(j=1;j<=n;j++)
{
if(j%2==1)
{
a=1*1.0/j+a;
}
else
{
a=-1*1.0/j+a;
}
}
printf("%.2lf\n",a);
a=0;
}
}
return 0;
}
6.
有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。
先列出数列,然后在给定的区域内选值。
注意最后一组数据可能不足m个,应该分情况讨论。
#include<stdio.h>
int main()
{
int n,m,i,j=0,a=0,b=0,c=0,d=0;
while(scanf("%d %d",&n,&m)!=EOF)
{
for(i=2;i<=2*n;i=i+2)
{
j++;
a=a+i;
d++;
if(j==m&&d==m)
{
b=a/m;
printf("%d",b);
c++;
a=0;
j=0;
}
if(j==m&&d>m)
{
b=a/m;
printf(" %d",b);
c++;
a=0;
j=0;
}
if(n%m>0&&c==n/m)
{
b=2*n-n%m+1;
printf(" %d",b);
a=0;
j=0;
break;
}
}
c=0;
d=0;
printf("\n");
}
return 0;
}
7.
对于一组分数,去掉一个最高分和一个最低分求平均值。
比较出最大值和最小值,然后用总分加去最多最小值然后再除即可。
注意保留两位小数而且每个数一行。
#include<stdio.h>
int main()
{
int n,i,x;
double a=0,b=100,c=0,d=0;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
{
scanf("%d",&x);
c=c+x;
if(a<x)
{
a=x;
}
if(b>x)
{
b=x;
}
}
d=(c-a-b)/(n-2);
printf("%.2lf\n",d);
c=0;
a=0;
b=100;
}
return 0;
}
8.
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。求n年时的母牛数。
这道题主要是要找规律,前四年先单独算,然后注意到n-3年的母牛总数就是第n年时的四岁母牛数,即第n年新生母牛数,然后加上n-1年母牛总数即可。
注意分情况讨论前四年。
#include<stdio.h>
#include<math.h>
int a[60];
int main()
{
int n;
a[1] = 1;
a[2] = 2;
a[3] = 3;
a[4] = 4;
for(int i=5;i <= 60;i++)
a[i] = a[i-1] + a[i-3];
while(scanf("%d",&n) && n != 0){
printf("%d\n",a[n]);
}
return 0;
}
9.
输入n(n<=100)个整数,按照绝对值从大到小排序后输出。
这道题应当将数据都变为绝对值或者用数据平分后的值进行运算。
注意与后面的数比较时,应再设一个循环。
#include<stdio.h>
#include<math.h>
int a[101];
int main()
{
int n,i,j,t;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
{
break;
}
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
{if(a[i]*a[i]<a[j]*a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}}
}
for(i=1;i<=n;i++)
{if(i==1)
{printf("%d",a[i]);}
if(i>1)
{
printf(" %d",a[i]);
}}
printf("\n");
}
return 0;
}
10.
一个整数插入有序数列,使数列依然有序。
这道题应该是按顺序比较,在满足大于一个n后,改变一个值,加上一个限制条件,使后来的数无法同通过此条件运行。
注意加上的条件一定要使i后面的值虽然比i大,但是不成立。
#include<stdio.h>
int main()
{
int n,m,i;
int a[1000];
while(scanf("%d %d",&n,&m)!=EOF)
{
if(n==0&&m==0)
break;
else
{
int t=0;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<=n;i++)
{
if(m<a[i]&&t<1)
{
printf("%d %d",m,a[i]);
t++;
}
else
printf("%d",a[i]);
if(i<n)
printf(" ");
}
printf("\n");
}}
return 0;
}
11.
最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零问题。
这道题应该多次分情况讨论。
注意给的钱数里有两元。
#include<stdio.h>
int main()
{
int n,x,i,m=0;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
{
break;
}
for(i=1;i<=n;i++)
{
scanf("%d",&x);
if(x>=100)
{
m=m+x/100;
x=x-x/100*100;
}
if(x>=50)
{
m=m+x/50;
x=x-x/50*50;
}
if(x>=10)
{
m=m+x/10;
x=x-x/10*10;
}
if(x>=5)
{
m=m+x/5;
x=x-x/5*5;
}
if(x>=2)
{
m=m+x/2;
x=x-x/2*2;
}
if(x>=1)
{
m=m+x;
}
}
printf("%d\n",m);
m=0;
}
return 0;
}
12.
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法。
这道题要用到斐波那契数列,然后就没什么了。
注意规律的寻找。
#include<stdio.h>
int main()
{
int a=1,b=1,M,N,i,j,t=0;
while(scanf("%d",&N)!=EOF)
{
for(i=1;i<=N;i++)
{
scanf("%d",&M);
if(M<=2)
{
a=1;
b=1;
}
if(M>2)
{
for(j=1;j<=M-2;j++)
{
t=a;
a=a+b;
b=t;
}
}
printf("%d\n",a);
a=1;
b=1;
}
}
return 0;
}
13.
去除不吉利车牌,问给出的一个牌照区间号,推断出交管局今次又要实际上给多少辆新的士车上牌照了。
这道题可以把车牌都当做一个十一位数来计算,求它的余数然后加上六百万。
注意车牌号当成数后,其值大于int的定义域。
#include<stdio.h>
int main()
{
int n,m,i,j=0,a;
while(scanf("%d %d",&n,&m)!=EOF)
{
if(n==0&&m==0)
{
break;
}
for(i=n;i<=m;i++)
{
j++;
for(a=i;a>=1;a=a/10)
{
if(a%10==4)
{
j--;
break;
}
if(a%100==62)
{
j--;
break;
}
}
}
printf("%d\n",j);
j=0;
}
return 0;
}
14.
第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪明的你,请帮悟空算一下,求他第一天开始吃的时候桃子一共有多少个。
这是一道经典的数学问题,按本来的方法计算有些繁琐,而用c语言的循环就可以简单粗暴的直接解决问题。
注意在一次计算结束时在末尾把数值初始处理。
#include<stdio.h>
int main()
{
int n,i,m=1;
while(scanf("%d\n",&n)!=EOF)
{
for(i=1;i<n;i++)
{
m=2*(m+1);
}
printf("%d\n",m);
m=1;
}
return 0;
}
15.
一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢?
这道题其实不难,但题目有些难懂,分析题目,即已知百分位以上的数以及它能整除的数,求它的个位与百位。
注意是尾数之间有空格。
#include<stdio.h>
int main()
{
int a,b,x=0,i;
while(scanf("%d %d",&a,&b)!=EOF)
{
if(a==0&&b==0)
{
break;
}
for(i=0;i<100;i++)
{
if((a*100+i)%b==0)
{
x++;
if(x==1)
{
if(i/10==0)
{
printf("0");
}
printf("%d",i);
}
else
{
if(i/10==0)
{
printf("0");
}
printf(" %d",i);
}
}
}
x=0;
printf("\n");
}
return 0;
}
总结:
对于这次的作业,对于格式与结果的要求极为严格,例如对于数间有空格,却不能在其他地方有空格,而对于其他的结果而言,对于格式大多都有要求,而且在做题过程中,有时需要找到规律,甚至使用一些函数,而这时,则显现出我的数学对于逻辑推理能力的缺失,对一些题目甚至很难找出其规律,还有就是算法的优化问题,对于有些题目,并不能直接进行运算,而是需要使用一些方法,比如上台阶,比如蜜蜂问题,都需要找到其规律,然后进行解题。对于此次作业加强了我的规格理念,同时更领略到了c语言的魅力。