分割自然数游戏 题目描述: 周末强强在家做作业,遇到了这样一道题,找出N位(N<8)的自然数中具有下列性质的数:如果将这个数字从中间开始分割成两部分,然后将这两部分相加,所得到的和的平方,等于原来那个数的(奇数的时候,中间的那个数字靠前)。从键盘输入N,直接在屏幕上输出答案。找不到满足要求的数时候,输出"NO FOUND"。强强想了许久也没想出来,想请你来帮忙,那么你该如何来帮助他呢? 输入描述: 输入N输出描述描述: 符合条件的N位整数样式输入:
4
样式输出:
2025 3025 9801
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include <stdio.h> #include <math.h> int main () { int n,i,j,x1,x2,sum=0 ,min,max,k; int a[10 ]; scanf ("%d" ,&n); min=pow (10 ,n-1 ); max=pow (10 ,n); if (n!=1 ) { for (i=min;i<max;i++) { k=pow (10 ,n/2 ); x1=i%k; x2=i/k; if ((x1+x2)*(x1+x2)==i) { a[sum]=i; sum++; } } if (sum==0 ) printf ("NO FOUND" ); else { for (j=0 ;j<sum-1 ;j++) printf ("%d\n" ,a[j]); printf ("%d" ,a[sum-1 ]); } } else printf ("NO FOUND" ); return 0 ; }
乐乐摘苹果 题目描述: 一天乐乐去果园玩,发现一棵苹果树上结出10个苹果。乐乐跑去摘苹果。乐乐找到一个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。 现在已知10个苹果到地面的高度,以及乐乐把手伸直的时候能够达到的最大高度,请帮乐乐算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。输入描述: 输入包括两行数据。第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。 第二行只包括一个100到120之间(包含100和120) 的整数(以厘米为单位),表示乐乐把手伸直的时候能够达到的最大高度。输出描述描述: 输出包括一行,这一行只包含一个整数,表示乐乐能够摘到的果的数目。样式输入:
100 200 150 140 129 134 167 198 200 111 110
样式输出:
5
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 #include <stdio.h> int main () { int a[10 ],i,sum=0 ,n; for (i=0 ;i<10 ;i++) scanf ("%d" ,&a[i]); scanf ("%d" ,&n); for (i=0 ;i<10 ;i++) if (a[i]<=n+30 ) sum++; printf ("%d" ,sum); return 0 ; }
不高兴的津津 题目描述: 津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。(津津一天上课的时间应分为两部分:在学校的时间和在复习班的时间,这两个时间相加就是津津一天上课的时间。如果这个时间大于八小时津津就会不高兴。)输入描述: 输入包括七行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间输出描述: 输出包括一行,这一行只包含一个数字。如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。样式输入:
5 3 6 2 7 2 5 3 5 4 0 4 0 6
样式输出:
3
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <stdio.h> int main () { int a,b; int max,k,i; max=8 ; for (i=0 ;i<7 ;i++) { scanf ("%d %d" ,&a,&b); if (a+b>max) { max=a+b; k=i+1 ; } } if (max==8 ) printf ("0\n" ); else printf ("%d\n" ,k); return 0 ; }
最低位(二进制的转换) 题目描述: 任意一个正整数A(1<=A<=109),输出它的最低位。例如,A=26,我们能写出它的二进制位11010,所以最低位是10,输出为2。再例如,A=88,则二进制位1011000,则最低位是1000,输出为8。输入描述: 输入包含一个整数A(1<=A<=109)输出描述: 对应输入的最低位 样式输入:
8
样式输出:
8
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> #include <math.h> int main () { int n,i=0 ,j,z,a[8 ],b[8 ],s=0 ; scanf ("%d" ,&n); while (n) { a[i]=n%2 ; n/=2 ; i++; } for (j=0 ;j<i;j++) { b[j]=a[j]; if (a[j]==1 ) break ; } for (z=0 ;z<=j;z++) if (b[z]!=0 ) s+=pow (2 ,z); printf ("%d" ,s); return 0 ; }
Fibonacci数列 题目描述: Fibonacci数列{0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, …},可以如下定义: F0=0 F1=1 Fi=F(i-1)+F(i-2) 对于所有的i大于2 写个程序计算Fibonacci数输入描述: 第一行为需要测试个数T,接着的T行,每一行包含一个数n(0<=n<=45 ),即你需要计算的F(n)输出描述: 每输入一个数n,输出对应的F(n)样式输入:
5 0 3 5 9 20
样式输出:
0 2 5 34 6765
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <stdio.h> int main () { int n,i,k,a[46 ]; scanf ("%d" ,&n); a[0 ]=0 ; a[1 ]=1 ; for (i=2 ;i<=45 ;i++) a[i]=a[i-1 ]+a[i-2 ]; for (i=0 ;i<n;i++) { scanf ("%d" ,&k); printf ("%d" ,a[k]); if (i<n-1 ) printf ("\n" ); } return 0 ; }
蛇形矩阵 题目描述: 蛇形矩阵是从1开始的自然数依次排列成的一个矩阵上三角形输入描述: 矩阵的大小N(N<20)输出描述描述: 输出一个蛇形矩阵,注意:每行行末没有空格,最后一行没有换行。样式输入:
5
样式输出:
1 3 6 10 15 2 5 9 14 4 8 13 7 12 11
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <stdio.h> int main () { int n,a[20 ]={1 },i,j; int N,k,z,s; scanf ("%d" ,&N); n=N; for (i=0 ,z=1 ;i<N-1 ;i++) { s=i+2 ; for (j=1 ;j<n;j++) { a[j]=a[j-1 ]+s; s++; } for (k=0 ;k<n-1 ;k++) printf ("%d " ,a[k]); printf ("%d\n" ,a[n-1 ]); a[0 ]+=z; z++; n--; } printf ("%d" ,a[0 ]); return 0 ; }
猪的安家 题目描述: Andy和Mary养了很多猪。他们想要给猪安家。但是Andy没有足够的猪圈,很多猪只能够在一个猪圈安家。举个例子,假如有16头猪,Andy建了3个猪圈,为了保证公平,剩下1头猪就没有地方安家了。Mary生气了,骂Andy没有脑子,并让他重新建立猪圈。这回Andy建造了5个猪圈,但是仍然有1头猪没有地方去,然后Andy又建造了7个猪圈,但是还有2头没有地方去。Andy都快疯了。你对这个事情感兴趣起来,你想通过Andy建造猪圈的过程,知道Andy家至少养了多少头猪。输入描述: 输入包含多组测试数据。每组数据第一行包含一个整数n (n <= 10),表示Andy建立猪圈的次数,接下来n行,每行两个整数ai, bi( bi <= ai <= 1000), 表示Andy建立了ai个猪圈,有bi头猪没有去处。你可以假定(ai, aj) = 1输出描述描述: 输出包含一个正整数,即为Andy家至少养猪的数目
样式输入:
3 3 1 5 1 7 2
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> int main () { int n,ai,bi; int i,j,k,a[1000 ],s=1000 ; scanf ("%d" ,&n); for (i=0 ;i<1000 ;i++) a[i]=i+1 ; for (i=0 ;i<n;i++) { scanf ("%d %d" ,&ai,&bi); k=0 ; for (j=0 ;j<s;j++) if (a[j]%ai==bi) { a[k]=a[j]; k++; } s=k; } if (k!=0 ) printf ("%d" ,a[0 ]); return 0 ; }
最大乘积的整数的拆分 题目描述: 将一个整数N分解成各不相同的加数的和,使这些加数的乘积最大。N范围为[5,1000]输入描述: 输入一个整数N(5<=N<=1000)输出描述描述: 能够使得积最大的加数序列 样式输入:
7
样式输出:
3 4
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #include <stdio.h> int main () { int n; scanf ("%d" ,&n); if (n%3 ==1 ) { n-=4 ; while (n) { printf ("3 " ); n-=3 ; } printf ("4" ); } else if (n%3 ==2 ) { printf ("2" ); n-=2 ; while (n) { printf (" 3" ); n-=3 ; } } else { printf ("3" ); n-=3 ; while (n) { printf (" 3" ); n-=3 ; } } return 0 ; }
插队 题目描述: 编写程序,对一个已经排好序的数组,输入一个元素。将该元素按原来的排序规则将它插入到数组中。 例如原数组为:1 2 6 7 9,输入待插入的元素3,则插入完成后结果为:1 2 3 6 7 9;输入描述: 输入包含两部分,第一部分先输入n,表示数组中元素个数,接着输入n个已经排序好的数,数组最大个数n为20,第二部分为待插入的数据输出描述描述: 新的排序好的数组元素样式输入:
5 1 2 6 7 9 3
样式输出:
1 2 3 6 7 9
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> int main () { int a[101 ],n,i,j; int s,temp; scanf ("%d" ,&n); for (i=0 ;i<n;i++) scanf ("%d" ,&a[i]); scanf ("%d" ,&s); for (i=0 ;i<n;i++) { if (a[i]>s) { for (j=n;j>i;j--) a[j]=a[j-1 ]; a[i]=s; break ; } } for (i=0 ;i<n;i++) printf ("%d " ,a[i]); printf ("%d" ,a[n]); return 0 ; }
2源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> int main () { int i,a[21 ],n,m,k=0 ,j; scanf ("%d" ,&n); for (i=0 ;i<n;i++) scanf ("%d" ,&a[i]); scanf ("%d" ,&m); for (i=0 ;i<n;i++) if (a[i]>m) { k=1 ; for (j=n;j>i;j--) a[j]=a[j-1 ]; a[i]=m; break ; } if (k==0 ) a[n]=m; for (i=0 ;i<n;i++) printf ("%d " ,a[i]); printf ("%d" ,a[n]); return 0 ; }
卫星定位 题目描述: 编写程序,对一个已经排好序的数组,输入一个元素。将该元素在数组中的位置索引出来(折半查找)。 例如原数组为:1 2 6 7 9,输入待查找的元素7,则查找结果为4,如果没有找到该元素,则输出-1;输入描述: 输入包含两部分,第一部分先输入n,表示数组中元素数,接着输入n个已经排序好的数,数组最大个数n为20,第二部分为待查找的数据输出描述描述: 待查找的元素位置样式输入:
5 1 2 6 7 9 7
样式输出:
4
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h> int main () { int i,a[20 ],n,m,k=-1 ; scanf ("%d" ,&n); for (i=0 ;i<n;i++) scanf ("%d" ,&a[i]); scanf ("%d" ,&m); for (i=0 ;i<n;i++) if (a[i]==m) { k=i+1 ; break ; } printf ("%d" ,k); return 0 ; }
警察抓贼 题目描述: 编写程序,将n(n<1000)个元素中的某个特定元素删除。如果该元素出现的次数t为奇数次,则删除第(t+1)/2那个,如果出现的次数t为偶数次,则删除第(t/2)个输入描述: 输入包含两部分,第一部分先输入n,接着输入n个原数据。第二部分为待删除的元素;输出描述描述: 删除特定元素后的剩余元素样式输入:
8 1 3 4 6 3 5 3 6 3
样式输出:
1 3 4 6 5 3 6
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #include <stdio.h> int main () { int n,a[1000 ]; int s,i,t=0 ,m,j=0 ; scanf ("%d" ,&n); for (i=0 ;i<n;i++) scanf ("%d" ,&a[i]); scanf ("%d" ,&s); for (i=0 ;i<n;i++) if (a[i]==s) t++; if (t%2 !=0 ) m=(t+1 )/2 ; else m=t/2 ; for (i=0 ;i<n-1 ;i++) { if (a[i]!=s) printf ("%d " ,a[i]); else { j++; if (j!=m) printf ("%d " ,a[i]); } } if (a[n-1 ]!=s) printf ("%d " ,a[n-1 ]); else { j++; if (j!=m) printf ("%d " ,a[n-1 ]); } return 0 ; }
2源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #include <stdio.h> int main () { int n,a[1000 ]; int s,i,t=0 ,m,j=0 ; scanf ("%d" ,&n); for (i=0 ;i<n;i++) scanf ("%d" ,&a[i]); scanf ("%d" ,&s); for (i=0 ;i<n;i++) if (a[i]==s) t++; if (t%2 !=0 ) m=(t+1 )/2 ; else m=t/2 ; for (i=0 ;i<n;i++) { if (a[i]!=s) printf ("%d " ,a[i]); else { j++; if (j!=m) printf ("%d " ,a[i]); } } return 0 ; }
是非黑白 题目描述: 编写函数实现两个等长字符串大小比较。比较规则如下:字符大小按对应的ASCII 码值,字符串大小比较时按对应字符比较,如果比较的两字符不等,则说明存在大小关系,停止比较操作。如果相等,则比较下一次字符,直到最后一个。如果第一个字符串小于第二个字符串则输出第二个字符串,如果大于则输出第一个字符串,如果相等则返回0;输入描述: 输入待比较的两个字符串输出描述描述: 字符串比较结果样式输入:
abcdefg abcdeff
样式输出:
abcdefg
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #include <stdio.h> #include <string.h> int main () { char a[81 ],b[81 ]; int i,len1,len2,max,s1=0 ,s2=0 ; scanf ("%s" ,a); scanf ("%s" ,b); len1=strlen (a); len2=strlen (b); max=(len1>len2)?len1:len2; for (i=0 ;i<len2;i++) { if (a[i]<b[i]) { s2++; break ; } if (a[i]>b[i]) { s1++; break ; } } if (s1==1 ) puts (a); if (s2==1 ) puts (b); if (s1==0 && s2==0 ) { if (len1>len2) puts (a); else if (len1<len2) puts (b); else printf ("0" ); } return 0 ; }
搭桥 题目描述: 编写函数将两个升序排列的字符串融合成一个字符串,融合后的字符串仍然是升序排列的。输入描述: 输入两升序字符串输出描述描述: 融合后的字符串样式输入:
acefi bdfg
样式输出:
abcdeffgi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <stdio.h> #include <string.h> int main () { char a[162 ],b[81 ]; int i,j,len,temp; scanf ("%s" ,a); scanf ("%s" ,b); strcat (a,b); len=strlen (a); for (i=0 ;i<len-1 ;i++) { for (j=i+1 ;j<len;j++) { if (a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } } puts (a); return 0 ; }
2源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <stdio.h> #include <string.h> int main () { char a[162 ],b[81 ]; int i,j,len,temp; scanf ("%s" ,a); scanf ("%s" ,b); strcat (a,b); len=strlen (a); for (i=0 ;i<len-1 ;i++) { for (j=i+1 ;j<len;j++) { if (a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } } puts (a); return 0 ; }
一清二楚 题目描述: 输入一字符串,该字符串包含字母、数字和其他字符。统计该字符串中数字、字母和其他字符出现的频率。(注意,其他字符包含空格)输入描述: 一混合字符串,最大长度为200 各类字符出现频率输出描述描述: 各类字符出现频率样式输入:
abcdefg9999////
样式输出:
ch:7 num:4 other:4
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> #include <string.h> int main () { char a[200 ]; int ch=0 ,num=0 ,other=0 ,len,i; gets(a); len=strlen (a); for (i=0 ;i<len;i++) { if (a[i]>='0' && a[i]<='9' ) num++; else if ((a[i]>='a' && a[i]<='z' ) || (a[i]>='A' && a[i]<='Z' )) ch++; else other++; } printf ("ch:%d\nnum:%d\nother:%d" ,ch,num,other); return 0 ; }
2源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> #include <string.h> int main () { char a[200 ]; int ch=0 ,num=0 ,other=0 ,len,i; gets(a); len=strlen (a); for (i=0 ;i<len;i++) { if (a[i]>='0' && a[i]<='9' ) num++; else if ((a[i]>='a' && a[i]<='z' ) || (a[i]>='A' && a[i]<='Z' )) ch++; else other++; } printf ("ch:%d\nnum:%d\nother:%d" ,ch,num,other); return 0 ; }
克隆 题目描述: 编写程序实现字符串拷贝,输入两字符串(字符串长度小于100),将第一个字符串拷贝到第二个字符串中;如果第一个字符串的长度a小于第二个字符串长度b,则第二个字符串的长度也将缩减至第一个的长度a,如果第一个字符串的长度a大于或等于第二个长度b,则只将a的前b个字符拷贝到第二个中; 输入描述: 输入两字符串输出描述描述: 输出第二个字符串,注意:输出不换行。样式输入:
Abdfeg Bdfad
样式输出:
Abdfe
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> #include <string.h> int main () { 1 : char a[100 ],b[100 ]; int len1,len2,i; scanf ("%s %s" ,a,b); len1=strlen (a); len2=strlen (b); if (len1<len2) { for (i=0 ;i<len1;i++) b[i]=a[i]; b[len1]='\0' ; } else { for (i=0 ;i<len2;i++) b[i]=a[i]; } puts (b); return 0 ; }
2源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> #include <string.h> int main () { int len1,len2,i; char a[100 ],b[100 ]; gets(a); gets(b); len1=strlen (a); len2=strlen (b); if (len1<len2) for (i=0 ;i<len1;i++) printf ("%c" ,a[i]); else { for (i=0 ;i<len2;i++) printf ("%c" ,a[i]); } return 0 ; }
四则运算程序 题目描述: 编制一个完成两个数的四则运算程序(加、减、乘、除)。如:用户输入34+56则输出结果34.00+56.00=90.00。要求运算结果保留两位小数,用户输入时一次将两个数和操作符输入。 数字可能是整数,也可能是浮点数。 知识点:格式输出,格式输入,条件语句 输入描述: 包含5组测试数据,每一组占一行,每一行包含数字和字符,运算结果不超过double范围。输出描述描述: 两个数的运算的结果,如果运算符不为加、减、乘、除,则输出Input Error! 每个数字保留两位小数精度。样式输入:
1+1 1-1 1*1 1/1 1^1
样式输出:
1.00+1.00=2.00 1.00-1.00=0.00 1.00*1.00=1.00 1.00/1.00=1.00 Input Error!
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #include <stdio.h> int main () { double a,b,s; char c; while (scanf ("%lf%c%lf" ,&a,&c,&b)!=EOF) { if (c=='+' ) { s=a+b; printf ("%.2lf%c%.2lf=%.2lf\n" ,a,c,b,s); } else if (c=='-' ) { s=a-b; printf ("%.2lf%c%.2lf=%.2lf\n" ,a,c,b,s); } else if (c=='*' ) { s=a*b; printf ("%.2lf%c%.2lf=%.2lf\n" ,a,c,b,s); } else if (c=='/' ) { s=a/b; printf ("%.2lf%c%.2lf=%.2lf\n" ,a,c,b,s); } else printf ("Input Error!\n" ); } return 0 ; }
落体球反弹 题目描述: 一球从某个高度(大于等于100米)自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?。(保证6位精度)输入描述: 高度为大于等于100米的实数,范围在double内。输出描述描述: 第10次落地时,经过多少米,第10次反弹高度。样式输入:
100
样式输出:
299.609375 0.097656
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h> int main () { int i=0 ,k=10 ; double sn,h,sum,n; scanf ("%lf" ,&n); sum=n; while (i<k) { sn=n/2.0 ; sum+=(2 *sn); n=sn; i++; } printf ("%.6lf\n%.6lf" ,sum-(2 *sn),sn); return 0 ; }
电话薄管理 题目描述: 利用结构体类型数组输入五位用户的姓名和电话号码,按姓名的字典顺序排列后(姓名相同保持原位置),输出用户的姓名和电话号码。 已知结构体类型如下:
1 2 3 4 struct user { char name[20]; char num[10]; };
输入描述: 输入姓名字符串和电话号码字符串。输出描述描述: 输出按姓名排序后的姓名字符串和电话号码字符串。每行的最后一个字符后不能有空格.所有输出的最后一行不能有回车样式输入:
aa 12345 dd 23456 cc 34567 bb 21456 ee 12456
样式输出:
aa 12345 bb 21456 cc 34567 dd 23456 ee 12456
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #include <stdio.h> #include <string.h> struct user { char name[20 ]; char num[10 ]; }; int main () { int n=5 ,i=0 ,j; char temp1[20 ],temp2[10 ]; struct user user [5]; while (n) { scanf ("%s" ,user[i].name); scanf ("%s" ,user[i].num); i++; n--; } for (i=0 ;i<4 ;i++) for (j=i+1 ;j<5 ;j++) if (strcmp (user[i].name,user[j].name)>0 ) { strcpy (temp1,user[i].name); strcpy (user[i].name,user[j].name); strcpy (user[j].name,temp1); strcpy (temp2,user[i].num); strcpy (user[i].num,user[j].num); strcpy (user[j].num,temp2); } for (i=0 ;i<4 ;i++) printf ("%s\n%s\n" ,user[i].name,user[i].num); printf ("%s\n%s" ,user[4 ].name,user[4 ].num); return 0 ; }
校门外的树 题目描述: 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。输入描述: 输入的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。输出描述描述: 输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。所有输出的最后一行不能有回车样式输入:
500 3 150 300 100 200 470 471
样式输出:
298
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <stdio.h> int main () { int L,M,sum,i,min,max; int a[10000 ]; scanf ("%d%d" ,&L,&M); sum=L+1 ; for (i=0 ;i<=L;i++) a[i]=1 ; while (M) { scanf ("%d%d" ,&min,&max); for (i=min;i<=max;i++) a[i]=0 ; M--; } for (i=0 ;i<=L;i++) if (a[i]==0 ) sum--; printf ("%d" ,sum); return 0 ; }
歌手比赛 题目描述: 青年歌手参加歌曲大奖赛,有10个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。输入描述: 10个评委的分数,每个分数是一个浮点数.输入数据保证有一个最低分,一个最高分,且最高分,最低分不相同.其它是数据与最低、最高均不相同输出描述描述: 输出歌手的得分,保留一位小数.所有输出的最后一行不能有回车样式输入:
8.5 9 9.8 6.5 8.7 8.5 9.3 9.6 8.9 8.2
样式输出:
8.8
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <stdio.h> int main () { double a[10 ],min,max,sum=0 ; int i; for (i=0 ;i<10 ;i++) scanf ("%lf" ,&a[i]); max=a[0 ]; min=a[0 ]; for (i=1 ;i<10 ;i++) { if (max<a[i]) max=a[i]; if (min>a[i]) min=a[i]; } for (i=0 ;i<10 ;i++) sum+=a[i]; sum-=max+min; sum=sum/8.0 ; printf ("%.1lf" ,sum); return 0 ; }
二维数组转置 题目描述: 编程实现使给定的一个N×M的二维整型数组转置,即行列互换。输入描述: 第一行是两个整数N和M ,接下来N行整数,每行包含M个整数。整数之间用空格隔开输出描述描述: 输出转置后的二维整型数组.每一个数据之间用一个空格隔开,但每行的最后一个数据后不能有空格.所有输出的最后一行不能有回车样式输入:
2 3 1 2 3 4 5 6
样式输出:
1 4 2 5 3 6
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <stdio.h> int main () { int a[100 ][100 ],i,j,n,m; scanf ("%d %d" ,&n,&m); for (i=0 ;i<n;i++) for (j=0 ;j<m;j++) scanf ("%d" ,&a[i][j]); for (i=0 ;i<m-1 ;i++) { for (j=0 ;j<n-1 ;j++) printf ("%d " ,a[j][i]); printf ("%d\n" ,a[n-1 ][i]); } for (i=0 ;i<n-1 ;i++) printf ("%d " ,a[i][m-1 ]); printf ("%d" ,a[n-1 ][m-1 ]); return 0 ; }
魔方矩阵 题目描述: 输入一奇数n(n<20),打印出1->nn构成的魔方矩阵。 魔方矩阵的行列及对角线的和都相等。 输入描述: 输入一奇数n(n<20) **输出描述描述:** 打印出1->n n构成的魔方矩阵,每一个数据之间用一个空格隔开,但每行的最后一个数据后不能有空格.所有输出的最后一行不能有回车样式输入:
3
样式输出:
8 1 6 3 5 7 4 9 2
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 #include <stdio.h> int main () { int a[20 ][20 ],i,j,n,k=1 ,m1,m2; scanf ("%d" ,&n); for (i=0 ;i<20 ;i++) for (j=0 ;j<20 ;j++) a[i][j]=0 ; while (k!=n*n+1 ) { if (k==1 ) { a[0 ][n/2 ]=1 ; m1=0 ; m2=n/2 ; } else { if (m1==0 &&m2!=n-1 ) { if (a[n-1 ][m2+1 ]==0 ) { a[n-1 ][m2+1 ]=k; m1=n-1 ; m2++; } else { a[m1+1 ][m2]=k; m1++; } } else if (m2==n-1 &&m1!=0 ) { if (a[m1-1 ][0 ]==0 ) { a[m1-1 ][0 ]=k; m1--; m2=0 ; } else { a[m1+1 ][m2]=k; m1++; } } else { if (a[m1-1 ][m2+1 ]==0 ) { a[m1-1 ][m2+1 ]=k; m1--; m2++; } else { a[m1+1 ][m2]=k; m1++; } } } k++; } for (i=0 ;i<n-1 ;i++) { for (j=0 ;j<n-1 ;j++) printf ("%d " ,a[i][j]); printf ("%d\n" ,a[i][n-1 ]); } for (j=0 ;j<n-1 ;j++) printf ("%d " ,a[n-1 ][j]); printf ("%d" ,a[n-1 ][n-1 ]); return 0 ; }
统计 题目描述: 统计个位数为6的n位数,且能被m整除的共有多少个?输入描述: 一个整数n(n<=5),表示该整数的位数,一个整数m(1~9);输出描述描述: 符合条件的数的个数。样式输入:
2 3
样式输出:
3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> #include <math.h> int main () { int m,n,i,sum=0 ,min,max; scanf ("%d%d" ,&n,&m); min=pow (10 ,n-1 ); max=pow (10 ,n); for (i=min;i<max;i++) if (i%10 ==6 ) if (i%m==0 ) sum++; printf ("%d" ,sum); return 0 ; }
四位数 题目描述: 计算满足下述条件的四位数的个数:把数字abcd重新组成两个新的两位数:ac及db, 如果新组成的两个十位数ac>db,且ac必须是偶数且能被n(n为1~9的整数)整除,db必须是奇数,同时两个新数的十位数字均不为零。输入描述: 一个1~9的整数。 输出描述描述: 符合条件的数的个数。样式输入:
5
样式输出:
180
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> int main () { int n,s,i,x,y,sum=0 ; scanf ("%d" ,&n); for (i=1000 ;i<10000 ;i++) { x=i%10 +i/100 %10 *10 ; y=i/10 %10 +i/1000 %10 *10 ; if (x<y && y%n==0 && y%2 ==0 && x%2 ==1 && x/10 !=0 &&y/10 !=0 ) sum++; } printf ("%d" ,sum); return 0 ; }
密码翻译 题目描述: 把某字符串中的所有小写字母改写成该字母的上一个字母,如果是字母a,则改写成字母z,b改写成a,大写字母和其它字符保持不变,并输出翻译后的字符数组。输入描述: 输入要翻译的密码字符串(长度小于100)输出描述描述: 翻译后的字符串。样式输入:
Adb Bcdza
样式输出:
Aca Bbcyz
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <stdio.h> #include <string.h> int main () { int len,i; char a[100 ]; gets(a); len=strlen (a); for (i=0 ;i<len;i++) { if (a[i]>='a' &&a[i]<='z' ) { if (a[i]=='a' ) a[i]='z' ; else a[i]--; } } for (i=0 ;i<len;i++) printf ("%c" ,a[i]); return 0 ; }
身高预测 题目描述: 每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后身高的因素有遗传、饮食习惯与坚持体育锻炼等。小孩成人后身高与其父母身高和自身性别密切相关。 设faHeight为其父身高,moHeight为其母身高,身高预测公式为: 男性成人时身高 = (faHeight + moHeight) * 0.54(cm) 女性成人时身高 = (faHeight * 0.923 + moHeight) / 2(cm) 此外,如果喜爱体育锻炼,那么可增加身高2%,如果有良好的卫生饮食习惯,那么可增加身高1.5%。 编程从键盘输入你的性别(用字符型变量存储,输入字符f表示女性,输入字符m表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量存储,输入字符y表示喜爱,输入字符n表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量存储,输入字符y表示喜爱,输入字符n表示不喜爱),利用给定公式和身高预测方法对你的身高进行预测。输入描述: 从键盘输入性别、父母身高、是否喜爱体育锻炼、是否有良好的饮食习惯等条件。输出描述描述: 身高(cm)。样式输入:
f 165 155 y y
样式输出:
159.07
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #include <stdio.h> int main () { double a,b,c,k=1 ; char ch1,ch2,ch3; scanf ("%c" ,&ch1); scanf ("%lf%lf" ,&a,&b); getchar(); scanf ("%c" ,&ch2); getchar(); scanf ("%c" ,&ch3); if (ch1=='f' ) { c=(a*0.923 +b)/2.0 ; if (ch2=='y' ) c*=1.02 ; if (ch3=='y' ) c*=1.015 ; } else { c=(a+b)*0.54 *k; if (ch2=='y' ) c*=1.02 ; if (ch3=='y' ) c*=1.015 ; } printf ("%.2lf" ,c); return 0 ; }
大奖赛现场统分 题目描述: 编写一个为某大奖赛现场统分的程序,在评委打分之后,及时通报评分结果。已知某大奖赛有n个选手参赛,m(m>2)个评委依次为参赛的选手评判打分,最高10分,最低0分。 统分规则为:在每个选手所得的m个得分中,去掉一个最高分,去掉一个最低分后,取平均分为该选手的最后得分。 要求编程实现:根据n个选手的最后得分,从高到低排出名次表,以便确定获奖名单。输入描述: 按以下顺序输入数据,数据之间用空格或回车间隔: 选手人数n(不超过40), 评委人数m(不超过20), 第1位选手的编号, m个评委的打分, 第2个选手的编号, m个评委的打分 第n位选手的编号, m个评委的打分。输出描述描述: 分行打印每个选手的名次,编号,最后得分,选手得分保留一位小数。样式输入:
5 5 11 9.5 9.6 9.7 9.4 9.0 12 9.0 9.2 9.1 9.3 8.9 13 9.6 9.7 9.5 9.8 9.4 14 8.9 8.8 8.7 9.0 8.6 15 9.0 9.1 8.8 8.9 9.2
样式输出:
1 13 9.6 2 11 9.5 3 12 9.1 4 15 9.0 5 14 8.8
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 #include <stdio.h> int main () { int n,m,i=0 ,j,z,a[40 ]; int k1,k2; double c[40 ]={0 },b[40 ][20 ],f,min,max,temp; scanf ("%d" ,&n); scanf ("%d" ,&m); z=n; while (z) { scanf ("%d" ,&a[i]); for (j=0 ;j<m;j++) scanf ("%lf" ,&b[i][j]); i++; z--; } for (i=0 ;i<n;i++) { max=b[i][0 ]; min=b[i][0 ]; k1=0 ; k2=0 ; for (j=1 ;j<m;j++) { if (b[i][j]>max) { max=b[i][j]; k1=j; } if (b[i][j]<min) { min=b[i][j]; k2=j; } } for (z=0 ;z<m;z++) if (z!=k1 && z!=k2) c[i]+=b[i][z]; f=m-2 ; c[i]/=f; } for (i=0 ;i<n-1 ;i++) for (j=i+1 ;j<n;j++) if (c[i]<c[j]) { temp=c[i]; c[i]=c[j]; c[j]=temp; temp=a[i]; a[i]=a[j]; a[j]=temp; } for (i=0 ;i<n;i++) printf ("%d %d %.1lf\n" ,i+1 ,a[i],c[i]); return 0 ; }
礼炮声响次数 题目描述: 在庆祝活动中。A,B,C三条军舰要同时开始鸣礼炮各n(n为整数)响。已知A舰每隔5秒放1次,B舰每隔6秒放1次,C舰每隔7秒放1次。假设各炮手对时间的掌握非常准确,请问观众总共可以听到几次礼炮声?输入描述: 一个整数(n)输出描述描述: 一个整数,即听到礼炮声的次数m。样式输入:
21
样式输出:
54
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> int main () { int n,sum,i; int a[21 ]={0 },b[21 ]={0 },c[21 ]={0 }; scanf ("%d" ,&n); sum=3 *n-2 ; for (i=1 ;i<=5 *(n-1 );i++) { if (i%5 ==0 &&i%6 ==0 &&i%7 ==0 ) sum-=2 ; if ((i%5 ==0 &&i%6 ==0 )||(i%5 ==0 &&i%7 ==0 )||(i%6 ==0 &&i%7 ==0 )) sum--; } for (i=5 *(n-1 )+1 ;i<=6 *(n-1 );i++) if (i%6 ==0 &&i%7 ==0 ) sum--; printf ("%d" ,sum); return 0 ; }
产值翻番计算 题目描述: 假设当年工业产值为100,工业产值的增长率每年为c%,从键盘输入一个c(0<=c<=30),试求工业产值过多少年可实现翻番(即增加一倍)。 注:后一年的产值是在前一年的基础上增长c%。输入描述: 一个0~30的实数(增长率)。输出描述描述: 实现翻番的年数。样式输入:
6
样式输出:
12
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> int main () { int c,yy=0 ; float m=100 ,k; scanf ("%d" ,&c); k=c/100.0 ; while (m<200 ) { yy++; m+=k*m; } printf ("%d" ,yy); return 0 ; }
福利彩票(双色球) 题目描述: 现在买彩票成为一种发财致富的途径,当然中奖的机会还是比较少,特别是大奖。 其游戏规则如下: 彩民从133中选择六个随机的号码,作为红球号码,从116中选择一个号码作为篮球号码。这样一共有7个号码。 中奖规则是:与开奖号码相比, 一等奖,红色号码和蓝色号码必须完全一样; 二等奖,六个红色号码相同,但蓝色号码不同; 三等奖5个红色号码相同(不分先后顺序)和一个蓝色号码相同; 四等奖,5个红色号码相同并且蓝色号码不同 或者 4个红色号码相同并且蓝色号码相同; 五等奖 4个红色号码相同并且蓝色号码不同 或者 3个红色号码相同并且蓝色号码相同; 六等奖 蓝色号码必须相同,红色号码可以为0、1、2个。 其他的号码属于没中奖输入描述: 输入第一行是7个整数,表示开奖号码,前面六个是红色球号码,最后一个是篮球号码,接下来的5行,每行包含合法的彩票号码(前面六个是红色球号码,最后一个是篮球号码),每个号码之间用空格隔开。输出描述描述: 对于每一个彩票号码,在一行中 输出其相应的奖励等级,一等奖为1,二等奖为2,三等奖为3,四等奖为4,五等奖为5,六等奖为6,无奖为0。样式输入:
23 1 8 9 28 16 9 2 3 4 5 6 22 9 2 3 4 5 6 22 9 2 3 4 5 6 22 9 2 3 4 5 6 22 9 2 3 4 5 6 22 9
样式输出:
6 6 6 6 6
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include <stdio.h> int main () { int a[7 ],b[7 ],i,sum=0 ; for (i=0 ;i<7 ;i++) scanf ("%d" ,&a[i]); while (scanf ("%d %d %d %d %d %d %d" ,&b[0 ],&b[1 ],&b[2 ],&b[3 ],&b[4 ],&b[5 ],&b[6 ])!=EOF) { for (i=0 ;i<6 ;i++) if (a[i]==b[i]) sum++; if (sum==6 &&a[6 ]==b[6 ]) printf ("1\n" ); else if (sum==6 &&a[6 ]!=b[6 ]) printf ("2\n" ); else if (sum==5 &&a[6 ]==b[6 ]) printf ("3\n" ); else if ((sum==5 &&a[6 ]!=b[6 ])||(sum==4 &&a[6 ]==b[6 ])) printf ("4\n" ); else if ((sum==4 &&a[6 ]!=b[6 ])||(sum==3 &&a[6 ]==b[6 ])) printf ("5\n" ); else if (a[6 ]==b[6 ]) printf ("6\n" ); else printf ("0\n" ); sum=0 ; } return 0 ; }
移动数列 题目描述: 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。输入描述: 输入总数n(0~20的整数),后移位数m(m<n),输入n个整数,间隔以空格。
输出描述: 移动后的数列。样式输入:
8 3 1 2 3 4 5 6 7 8
样式输出:
6 7 8 1 2 3 4 5
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <stdio.h> int main () { int a[20 ],i,n,m,b[20 ],k=0 ; scanf ("%d%d" ,&n,&m); for (i=0 ;i<n;i++) scanf ("%d" ,&a[i]); for (i=n-1 ;i>=n-m;i--) { b[k]=a[i]; k++; } for (i=n-1 ;i>=m;i--) a[i]=a[i-m]; for (i=k-1 ;i>=0 ;i--) printf ("%d " ,b[i]); for (i=m;i<n-1 ;i++) printf ("%d " ,a[i]); printf ("%d" ,a[n-1 ]); return 0 ; }
行李托运 题目描述: 铁路托运行李规定:行李重不超过50公斤的,托运费按每公斤0.15元计费;如超过50公斤,超过部分每公斤按0.25元计费。请编程实现自动计费功能。输入描述: 输入一个整数,表述要托运的行李的重量,单位为公斤输出描述: 托运的行李重量(单位公斤)空格和运费(单位为元,保留2位小数)。 样式输入:
45
样式输出:
45 6.75
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> int main () { int n; double sum=0 ; scanf ("%d" ,&n); printf ("%d " ,n); if (n<=50 ) sum+=0.15 *n; else sum+=0.15 *50 +0.25 *(n-50 ); printf ("%.2lf" ,sum); return 0 ; }
分数比较 题目描述: 请编程实现比较两个分数的大小。(注:进行分数的通分后再比较分子的大小)输入描述: 输入两个分数,格式为分子/分母 分子/分母,分子,分母均为整数。输出描述描述: 输出比较后的结果。如果等于,则输出分子/分母=分子/分母;如果小于分子/分母<分子/分母;如果大于,则输出分子/分母>分子/分母样式输入:
1/2 1/3
样式输出:
1/2>1/3
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #include <stdio.h> int main () { int a,b,c,d,x,y; scanf ("%d/%d %d/%d" ,&a,&b,&c,&d); x=a*d; y=b*c; if (a<0 || c<0 ) { if (a>0 && c<0 ) printf ("%d/%d>%d/%d" ,a,b,c,d); if (a<0 && c>0 ) printf ("%d/%d<%d/%d" ,a,b,c,d); if (a<0 && c<0 ) if (x>y) printf ("%d/%d<%d/%d" ,a,b,c,d); else if (x==y) printf ("%d/%d=%d/%d" ,a,b,c,d); else printf ("%d/%d>%d/%d" ,a,b,c,d); } else if (x>y) printf ("%d/%d>%d/%d" ,a,b,c,d); else if (x==y) printf ("%d/%d=%d/%d" ,a,b,c,d); else printf ("%d/%d<%d/%d" ,a,b,c,d); return 0 ; }
求人数 题目描述: 定义一个函数,功能是计算n个学生的成绩中,高于平均成绩的人数,并作为函数值。用主函数来调用它,统计50个学生成绩中,高于平均成绩的有多少人?输入描述: 输入50个学生的成绩输出描述描述: 输出一个整数表示高于平均成绩的人数
样式输入:
45 46 47 48 49 50 41 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
样式输出:
25
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <stdio.h> int avg (int a[50 ]) { int i,sum=0 ; double k=0 ; for (i=0 ;i<50 ;i++) k+=a[i]; k/=50.0 ; for (i=0 ;i<50 ;i++) if (a[i]>k) sum++; return sum; } int main () { int a[50 ],n,i; for (i=0 ;i<50 ;i++) scanf ("%d" ,&a[i]); n=avg(a); printf ("%d" ,n); return 0 ; }
e数列 题目描述: ┌ e(1)=e(2)=1, └ e(n)=(n-1)*e(n-1)+(n-2)*e(n-2) (n>2) 称为e数列, 每一个e(n) (n=1,2,…)称为e数。求[1,m]之内: (1)最大的e数。 (2)e数的数目输入描述: 输入一个整数,表示m的值,m<300000;输出描述描述: 输出两个整数,第一个表示最大的e数,第二个表示e数的数目;样式输入:
30000
样式输出:
16687 8
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> int main () { int e[20 ]={1 ,1 ,1 },m,j,i=2 ,max; scanf ("%d" ,&m); while (e[i]<=300000 ) { i++; e[i]=(i-1 )*e[i-1 ]+(i-2 )*e[i-2 ]; } for (j=1 ;j<i;j++) { if (e[j]<=m) max=e[j]; else break ; } printf ("%d\n%d" ,max,j-1 ); return 0 ; }
运算符++前置后置练习(胡宁静) 题目描述: 程序部分代码如下,写出一个完整的程序,输出m,n的值。 int i=8,j=10,m,n; m=++i; n=j++; m=++j; n=i++;输入描述: 无输入输出描述描述: 输出m,n的值(不含回车,m n中间有一空格)样式输入:
无
样式输出:
12 9
源代码
1 2 3 4 5 6 7 8 9 10 #include <stdio.h> main() { int i=8 ,j=10 ,m,n; m=++i; n=j++; m=++j; n=i++; printf ("%d %d" ,m,n); }
按格式要求显示日期 题目描述: 接收用户从键盘输入的日期信息并将其显示出来。其中,输入日期的形式为月/日/年(即mm/dd/yyyy),输出日期的形式为年月日(即yyyymmdd)。 输入描述: 以形式为“月/日/年”(即mm/dd/yyyy)的格式,输入一个日期。输出描述描述: 以形式为年月日(即yyyymmdd)输出日期。
样式输入:
2/17/2010
样式输出:
20100217
源代码
1 2 3 4 5 6 7 #include <stdio.h> main() { int y,m,d; scanf ("%d/%d/%d" ,&m,&d,&y); printf ("%d%02d%02d" ,y,m,d); }
求圆的周长和面积 题目描述: 从键盘输入圆的半径,求该圆的周长和面积。(注: 取3.14)输入描述: 一个实数r。输出描述描述: 圆的周长和面积。样式输入:
1
样式输出:
r=1.00,l=6.28,s=3.14
源代码
1 2 3 4 5 6 7 8 #include <stdio.h> #define PI 3.14 main() { float r,l,s; scanf ("%f" ,&r); printf ("r=%.2f,l=%.2f,s=%.2f" ,r,2 *PI*r,PI*r*r); }
计算分段函数 题目描述: 计算分段函数 y=x (x<0) y=0 (x=0) y=sqrt(x) (x>0) 输入x,打印出y值。输入描述: 一个实数x。输出描述描述: x的值和分段函数y的值。样式输入:
0
样式输出:
x=0.000000,y=0.000000
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> #include <math.h> main() { double x,z; scanf ("%lf" ,&x); if (x>0 ) z=sqrt (x); else if (x==0 ) z=0 ; else z=x; printf ("x=%lf,y=%lf" ,x,z); }
确定一个数的位数 题目描述: 编写程序用来确定一个数的位数。如: 输入: 567 输出:The number 567 has 3 digits 假设输入的数最多不超过四位。输入描述: 一个整数n。 输出描述描述: 按指定格式输出这个数的位数。样式输入:
567
样式输出:
The number 567 has 3 digits
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <stdio.h> main() { int n,digits=1 ,k; scanf ("%d" ,&n); k=n; if (n>9 ) { while (n/10 >0 ) { digits++; n/=10 ; } printf ("The number %d has %d digits" ,k,digits); } else printf ("The number %d has 1 digit" ,k); }
显示某个数的英文单词 题目描述: 用switch语句编写一个程序,要求用户输入一个两位的整数,显示这个数的英文单词。例如:输入45,显示forty-five。注意:对11~19要进行特殊处理。输入描述: 一个两位的整数n。输出描述描述: 这个数的英文单词。样式输入:
45
样式输出:
forty-five
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 #include <stdio.h> main() { int n,s,m; scanf ("%d" ,&n); switch (n) { case 10 :printf ("ten" );break ; case 11 :printf ("eleven" );break ; case 12 :printf ("twelve" );break ; case 13 :printf ("thirteen" );break ; case 14 :printf ("fourteen" );break ; case 15 :printf ("fifteen" );break ; case 16 :printf ("sixteen" );break ; case 17 :printf ("seventeen" );break ; case 18 :printf ("eighteen" );break ; case 19 :printf ("nineteen" );break ; } s=n/10 ; m=n%10 ; if (s>1 ) { switch (s) { case 2 :printf ("twenty" );break ; case 3 :printf ("thirty" );break ; case 4 :printf ("fourty" );break ; case 5 :printf ("fifty" );break ; case 6 :printf ("sixty" );break ; case 7 :printf ("seventy" );break ; case 8 :printf ("eightty" );break ; case 9 :printf ("ninety" );break ; } switch (m) { case 0 :printf ("" );break ; case 1 :printf ("-one" );break ; case 2 :printf ("-two" );break ; case 3 :printf ("-three" );break ; case 4 :printf ("-four" );break ; case 5 :printf ("-five" );break ; case 6 :printf ("-six" );break ; case 7 :printf ("-seven" );break ; case 8 :printf ("-eight" );break ; case 9 :printf ("-nine" );break ; } } }
找出最大数 题目描述: 用户从键盘输入若干个数,当输入0或负数时输出这些数中的最大非负数。注意,输入的数不要求一定是整数。输入描述: 输入若干个数,最后一个为0或负数。 输出描述描述: 最大非负数。样式输入:
2.3 6.3 5.4 0
样式输出:
max=6.300000
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> main() { float max=0 ,n; scanf ("%f" ,&n); while (n>0 ) { if (max<n) max=n; scanf ("%f" ,&n); if (n==0 ) break ; } printf ("max=%f" ,max); }
求最简分式 题目描述: 用户输入一个分数,要求将其约分,输出最简分式。例如:输入3/12,输出1/4。提示:为了把分式化简为最简分式,首先求分子和分母的最大公约数,然后分子和分母分别除以最大公约数。 输入描述: 一个分数。输出描述描述: 最简分式。样式输入:
3/12
样式输出:
最简分数为1/4
源代码
1 2 3 4 5 6 7 8 9 10 11 12 #include <stdio.h> main() { int n,m,i; scanf ("%d/%d" ,&n,&m); for (i=n;i>0 ;i--) if (n%i==0 && m%i==0 ) { printf ("最简分数为%d/%d" ,n/i,m/i); break ; } }
计算多项式的和 题目描述: 计算从2~n的自然数中偶数的和,即2+4+6+8+…的值。 注意:n可能是偶数,也可能是奇数。输入描述: 一个整数n。输出描述描述: 从2~n的自然数中偶数的和。样式输入:
100
样式输出:
sum=2550
源代码
1 2 3 4 5 6 7 8 9 10 #include <stdio.h> main() { int n,sum=0 ,i; scanf ("%d" ,&n); for (i=1 ;i<=n;i++) if (i%2 ==0 ) sum+=i; printf ("sum=%d" ,sum); }
阶乘累加 题目描述: 计算1!+2!+3!……+n!输入描述: 一个整数n(n<=20)。
输出描述描述: 1到n的阶乘累加之和。 样式输入:
5
样式输出:
s=153
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 #include <stdio.h> main() { int n,s=0 ,m,i,j; scanf ("%d" ,&n); for (i=1 ;i<=n;i++) { for (j=1 ,m=1 ;j<=i;j++) m*=j; s+=m; } printf ("s=%d" ,s); }
计算e的近似值 题目描述: 利用泰勒级数 e=1+1/1!+1/2!+……+1/n!, 计算e的近似值。精度要求最后一项的绝对值小于f(如:f=1e-5)。 输入描述: 精度。 输出描述描述: e的近似值,保留6位小数。样式输入:
1e-5
样式输出:
e=2.718282
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h> main() { int n,m=1 ,i,k; float e=1 ,s; scanf ("%f" ,&s); for (n=1 ;;n++) { for (i=1 ,k=1 ;i<=n;i++) k*=i; m=k; e+=1.0 /m; if (1.0 /m<s) break ; } printf ("e=%f" ,e); }
计算sinx的值 题目描述: 利用泰勒级数 sinx=x-x^3/3!+x^5/5!-x^7/7!+…… 计算sinx的值。要求最后一项的绝对值小于1e-5,并统计出此时累加的项数。输入描述: 一个实数x(一个角度的弧度数)输出描述描述: sinx的值和累加的项数。样式输入:
1.57
样式输出:
sinx=1.000000,n=6
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> #include <math.h> void main () { int n=1 ,s=3 ,j,m=1 ; double sinx,x,z,i=3 ; scanf ("%lf" ,&x); sinx=x; do { for (j=1 ,m=1 ;j<=s;j++) m*=j; z=(pow (-1 ,n)*pow (x,i))/m; sinx+=z; n++; i+=2 ; s+=2 ; }while (fabs (z)>=1e-5 ); printf ("sinx=%lf,n=%d" ,sinx,n); }
题目描述: 打印n(三位的整数)以内的所有水仙花数。所谓水仙花数是指一个三位的整数,其各位数字的立方和等于该数本身。例如:153是水仙花数,因为153=1^3+5^3+3^3。输入描述: 一个整数n。输出描述描述: 符合条件的水仙花数。样式输入:
400
样式输出:
153 370 371
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> main() { int n,i,j,k,r; scanf ("%d" ,&n); for (i=100 ;i<=n;i++) { j=i%10 ; k=(i%100 )/10 ; r=i/100 ; if (i==j*j*j+k*k*k+r*r*r) printf ("%d\n" ,i); } }
打印ASCII码值、字符对照表 题目描述: 打印码值为n1~n2( n1和n2的值在33~127范围内)的ASCII码值、字符对照表。输入描述: 两个整数n1和n2(值在33~127范围内)。输出描述描述: 对照表。要求:ASCII码值占7列,字符占9列,向右对齐,每行打3个码值。样式输入:
65 70
样式输出: 65 A 66 B 67 C 68 D 69 E 70 F源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 #include <stdio.h> void main () { int n1,n2,i,j; scanf ("%d" ,&n1); scanf ("%d" ,&n2); for (i=n1,j=1 ;i<=n2;i++,j++) { printf ("%7d%9c" ,i,i); if (j%3 ==0 ) printf ("\n" ); } }
第n年时有多少头母牛? 题目描述: 递增的牛群:若一头小母牛,从第4年开始每年生一头小母牛。按此规律,第n年时有多少头母牛?输入描述: 一 个整数n(n>=4 && n<=20)。输出描述描述: 第n年时的母牛数。样式输入:
4
样式输出:
2
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> void main () { int n,f,f1,f2,f3,i; scanf ("%d" ,&n); for (i=4 ,f1=f2=f3=1 ;i<=n;i++) { f=f1+f3; f3=f2; f2=f1; f1=f; } printf ("%d" ,f); }
百马百担问题 题目描述: 百马百担问题:有n1匹马,驮n2担货,大马驮3担,中马驮2担,两匹小马驮1担,问有多少种驮法? 注意:每种马至少有1匹.输入描述: 两个整数n1(马匹数)和n2(担货数)。输出描述描述: 驮法数。样式输入:
100 100
样式输出:
6
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <stdio.h> main() { int n1,n2,sum=0 ,x,y,z; scanf ("%d %d" ,&n1,&n2); for (x=1 ;x<=n1;x++) { for (y=1 ;y<=n1-x;y++) { z=n1-x-y; if ((3 *x+2 *y+0.5 *z)==n2) sum++; } } printf ("%d" ,sum); }
求可行的购鱼方案 题目描述: 有钱m元,要买金鱼n条。市场上的金鱼主要有三个品种,价格分别为:红狮头每条0.9元,黑骑士每条1.2元,白金刚每条1.6元。如果每一个品种都至少购买一条,要买足n条金鱼,且正好用完n元。试编写程序求出可行的购鱼方案。输入描述: 两个整数m(钱数)和n(金鱼总数)。输出描述描述: 购鱼方案。注:一种方案打一行,按红狮头、黑骑士、白金刚的顺序打出条数,数据之间留一个空格。样式输入:
30 25
样式输出:
4 18 3 8 11 6 12 4 9
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <stdio.h> void main () { int n,m,i,j; double k; scanf ("%d%d" ,&m,&n); for (i=1 ;i<=m/1.6 ;i++) { for (j=1 ;j<=(m-1.6 *i)/1.2 ;j++) { k=1.6 *i+1.2 *j+0.9 *(n-i-j); if (k==m) printf ("%d %d %d\n" ,n-i-j,j,i); } } }
最低位(二进制的转换) 题目描述: 任意一个正整数A(1<=A<=109),输出它的最低位。例如,A=26,我们能写出它的二进制位11010,所以最低位是10,输出为2。例如,A=88,则二进制位1011000,则最低位是1000,输出为8。再例如A=7,则二进制位111,则最低位是1,输出为1。输入描述: 输入包含一个整数A(1<=A<=109)输出描述描述: 对应输入的最低位(输出不包含回车)样式输入:
8
样式输出:
8
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h> #include <math.h> #define N 10 main() { int A,law,a[N],i,j; scanf ("%d" ,&A); for (i=0 ;i<=N;i++) { a[i]=A%2 ; A/=2 ; if (a[i]==1 ) break ; } law=pow (2 ,i); printf ("%d" ,law); }
Fibonacci数列 题目描述: Fibonacci数列{0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, …},可以如下定义: F0=0 F1=1 Fi=F(i-1)+F(i-2) 对于所有的i大于2 写个程序计算Fibonacci数输入描述: 第一行为需要测试个数T,接着的1行,输入T个数据,每一个数据包含一个数n(0<=n<=45 ),即你需要计算的F(n)输出描述描述: 对每输入的数n,输出对应的F(n),每个F(n)之间包含一个空格,最后一行输出不含回车。
样式输入:
5 0 3 5 9 20
样式输出:
0 2 5 34 6765
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <stdio.h> int main () { int n,i,k; int b[46 ]={0 ,1 },a[100 ]; scanf ("%d" ,&n); for (i=0 ;i<n;i++) scanf ("%d" ,&a[i]); for (i=2 ;i<=45 ;i++) { b[i]=b[i-1 ]+b[i-2 ]; } for (i=0 ;i<n-1 ;i++) { k=a[i]; printf ("%d " ,b[k]); } k=a[n-1 ]; printf ("%d" ,b[k]); return 0 ; }
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <stdio.h> int main () { int n,i,k; int b[46 ]={0 ,1 },a[100 ]; scanf ("%d" ,&n); for (i=0 ;i<n;i++) scanf ("%d" ,&a[i]); for (i=2 ;i<=45 ;i++) { b[i]=b[i-1 ]+b[i-2 ]; } for (i=0 ;i<n-1 ;i++) { k=a[i]; printf ("%d " ,b[k]); } k=a[n-1 ]; printf ("%d" ,b[k]); return 0 ; }
蛇形矩阵1—一个方向生成(胡宁静) 题目描述: 蛇形矩阵是从1开始的自然数依次排列成的一个矩阵上三角形。注意看样式输出。 输入描述: 矩阵的大小N(N<20) 输出描述描述: 输出一个蛇形矩阵,注意:每行行末没有空格,最后一行没有换行。样式输入:
5
样式输出:
1 3 6 10 15 2 5 9 14 4 8 13 7 12 11
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <stdio.h> int main () { int n,a[20 ]={1 },i,j; int N,k,z,s; scanf ("%d" ,&N); n=N; for (i=0 ,z=1 ;i<N-1 ;i++) { s=i+2 ; for (j=1 ;j<n;j++) { a[j]=a[j-1 ]+s; s++; } for (k=0 ;k<n-1 ;k++) printf ("%d " ,a[k]); printf ("%d\n" ,a[n-1 ]); a[0 ]+=z; z++; n--; } printf ("%d" ,a[0 ]); return 0 ; }
蛇形矩阵2—双向生成 题目描述: 蛇形矩阵是从1开始的自然数依次排列成的一个矩阵上三角形。注意看样式输出。输入描述: 矩阵的大小N(N<20)输出描述描述: 输出一个蛇形矩阵,注意:每行行末没有空格,最后一行没有换行。样式输入:
5
样式输出:
1 3 4 10 11 2 5 9 12 6 8 13 7 14 15
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 #include <stdio.h> int main () { int n,a[20 ][20 ]={1 },i,j; int N,k,z,s,f; int temp; scanf ("%d" ,&N); n=N; for (i=0 ,z=1 ;i<N;) { s=i+2 ; for (j=1 ;j<n;j++) { a[i][j]=a[i][j-1 ]+s; s++; } i++; a[i][0 ]=a[i-1 ][0 ]+z; z++; n--; } n=N; for (i=2 ;i<N;i+=2 ) { f=i; for (k=0 ,j=0 ;k<=i/2 ;k++) { temp=a[i][j]; a[i][j]=a[j][i]; a[j][i]=temp; i--; j++; } i=f; } for (i=0 ;i<N-1 ;i++) { for (k=0 ;k<n-1 ;k++) printf ("%d " ,a[i][k]); printf ("%d\n" ,a[i][n-1 ]); n--; } printf ("%d" ,a[N-1 ][0 ]); return 0 ; }
猪的安家 题目描述: Andy和Mary养了很多猪。他们想要给猪安家。但是Andy没有足够的猪圈,很多猪只能够在一个猪圈安家。举个例子,假如有16头猪,Andy建了3个猪圈,为了保证公平,剩下1头猪就没有地方安家了。Mary生气了,骂Andy没有脑子,并让他重新建立猪圈。这回Andy建造了5个猪圈,但是仍然有1头猪没有地方去,然后Andy又建造了7个猪圈,但是还有2头没有地方去。Andy都快疯了。你对这个事情感兴趣起来,你想通过Andy建造猪圈的过程,知道Andy家至少养了多少头猪。输入描述: 输入包含多组测试数据。每组数据第一行包含一个整数n (n <= 10),表示Andy建立猪圈的次数,接下来n行,每行两个整数ai, bi( bi <= ai <= 1000), 表示Andy建立了ai个猪圈,有bi头猪没有去处。你可以假定(ai, aj) = 1输出描述描述: 输出包含一个正整数,即为Andy家至少养猪的数目 样式输入:
3 3 1 5 1 7 2
样式输出:
16
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> int main () { int n,ai,bi; int i,j,k,a[1000 ],s=1000 ; scanf ("%d" ,&n); for (i=0 ;i<1000 ;i++) a[i]=i+1 ; for (i=0 ;i<n;i++) { scanf ("%d %d" ,&ai,&bi); k=0 ; for (j=0 ;j<s;j++) if (a[j]%ai==bi) { a[k]=a[j]; k++; } s=k; } if (k!=0 ) printf ("%d" ,a[0 ]); return 0 ; }
最大乘积的整数的拆分 题目描述: 将一个整数N分解成各不相同的加数的和,使这些加数的乘积最大。N范围为[5,1000] 提示:从乘积最大的原则出发:多拆3,少拆2,不拆1,1对乘法没有贡献。如6拆为3+3>3+2+1;4拆分为2+2>3+1,因此,拆分的最大数为3.输入描述: 输入一个整数N(5<=N<=1000)输出描述描述: 能够使得积最大的加数序列,序列按拆分数由小到大的顺序排列,每个数字之间有一个空格,最后一个数字没有空格。样式输入:
7
样式输出:
2 2 3
源代码1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #include <stdio.h> int main () { int n; scanf ("%d" ,&n); if (n%3 ==1 ) { printf ("2 2" ); n-=4 ; while (n) { printf (" 3" ); n-=3 ; } } else if (n%3 ==2 ) { printf ("2" ); n-=2 ; while (n) { printf (" 3" ); n-=3 ; } } else { printf ("3" ); n-=3 ; while (n) { printf (" 3" ); n-=3 ; } } return 0 ; }
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #include <stdio.h> int main () { int n,i; scanf ("%d" ,&n); if (n%3 ==1 ) { printf ("2 2" ); while (n!=4 ) { n-=3 ; printf (" 3" ); } } else if (n%3 ==2 ) { printf ("2" ); while (n!=2 ) { n-=3 ; printf (" 3" ); } } else { while (n!=3 ) { n-=3 ; printf ("3 " ); } printf ("3" ); } return 0 ; }
插队—数的插入 题目描述: 编写程序,对一个已经排好序的数组,输入一个元素。将该元素按原来的排序规则将它插入到数组中。 例如原数组为:1 2 6 7 9,输入待插入的元素3,则插入完成后结果为:1 2 3 6 7 9;输入描述: 输入包含两部分,第一部分先输入n(2<n<=100),表示数组中元素个数,接着输入n个已经排序好的数,第二部分为待插入的数据 输出描述描述: 新的排序好的数组元素,数组元素之间用一个空格分隔,最后一个元素后不要空格。样式输入:
5 1 2 6 7 9 3
样式输出:
1 2 3 6 7 9
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> int main () { int a[101 ],n,i,j; int s,temp; scanf ("%d" ,&n); for (i=0 ;i<n;i++) scanf ("%d" ,&a[i]); scanf ("%d" ,&s); for (i=0 ;i<n;i++) { if (a[i]>s) { for (j=n;j>i;j--) a[j]=a[j-1 ]; a[i]=s; break ; } } for (i=0 ;i<n;i++) printf ("%d " ,a[i]); printf ("%d" ,a[n]); return 0 ; }
卫星定位—数的查找 题目描述: 编写程序,对一个已经排好序的数组,输入一个元素。将该元素在数组中的位置索引出来(折半查找)。 例如原数组为:1 2 6 7 9,输入待查找的元素7,则查找结果为4,如果没有找到该元素,则输出数值-1;
输入描述: 输入包含两部分,第一部分先输入n,表示数组中元素数,接着输入n个已经排序好的数,数组最大个数n为20,第二部分为待查找的数据输出描述描述: 待查找的元素位置样式输入:
5 1 2 6 7 9 7
样式输出:
4
[源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include <stdio.h> int main () { int n,k,a[20 ]; int i,low,top,mid,loc=-1 ; scanf ("%d" ,&n); for (i=0 ;i<n;i++) scanf ("%d" ,&a[i]); scanf ("%d" ,&k); low=0 ; top=n-1 ; while (low<top) { mid=(low+top)/2 ; if (a[mid]>k) top=mid-1 ; else if (a[mid]<k) low=mid; else { loc=mid+1 ; break ; } } printf ("%d" ,loc); return 0 ; }
警察抓贼—数的删除 题目描述: 编写程序,将n(n<1000)个元素中的某个特定元素删除。如果该元素出现的次数t为奇数次,则删除第(t+1)/2那个,如果出现的次数t为偶数次,则删除第(t/2)个输入描述: 输入包含两部分,第一部分先输入n,接着输入n个原数据。第二部分为待删除的元素;输出描述描述: 删除特定元素后的剩余元素,如果没有元素被删除,则原样输出;元素之间用一个空格分隔,最后一个元素没有回车。样式输入:
8 1 3 4 6 3 5 3 6 3
样式输出:
1 3 4 6 5 3 6
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #include <stdio.h> int main () { int n,a[1000 ]; int s,i,t=0 ,m,j=0 ; scanf ("%d" ,&n); for (i=0 ;i<n;i++) scanf ("%d" ,&a[i]); scanf ("%d" ,&s); for (i=0 ;i<n;i++) if (a[i]==s) t++; if (t%2 !=0 ) m=(t+1 )/2 ; else m=t/2 ; for (i=0 ;i<n-1 ;i++) { if (a[i]!=s) printf ("%d " ,a[i]); else { j++; if (j!=m) printf ("%d " ,a[i]); } } if (a[n-1 ]!=s) printf ("%d" ,a[n-1 ]); else { j++; if (j!=m) printf ("%d" ,a[n-1 ]); } return 0 ; }
是非黑白—字符串比较 题目描述: 编写函数实现两个等长字符串大小比较(两字符串长度<81)。比较规则如下:字符大小按对应的ASCII 码值,字符串大小比较时按对应字符比较,如果比较的两字符不等,则说明存在大小关系,停止比较操作。如果相等,则比较下一次字符,直到最后一个。如果第一个字符串小于第二个字符串则输出第二个字符串,如果大于则输出第一个字符串(字符串输出含回车),如果相等则返回数值0(不含回车);要求不使用cmpstr()函数完成;输入描述: 输入待比较的两个字符串输出描述描述: 字符串比较结果样式输入:
abcdefg abcdeff
样式输出:
abcdefg
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #include <stdio.h> #include <string.h> int main () { char a[81 ],b[81 ]; int i,len1,len2,max,s1=0 ,s2=0 ; scanf ("%s" ,a); scanf ("%s" ,b); len1=strlen (a); len2=strlen (b); max=(len1>len2)?len1:len2; for (i=0 ;i<len2;i++) { if (a[i]<b[i]) { s2++; break ; } if (a[i]>b[i]) { s1++; break ; } } if (s1==1 ) puts (a); if (s2==1 ) puts (b); if (s1==0 && s2==0 ) { if (len1>len2) puts (a); else if (len1<len2) puts (b); else printf ("0" ); } return 0 ; }
搭桥—字符串连接 题目描述: 编写函数将两个升序排列的字符串(串长<81)融合成一个字符串,融合后的字符串仍然是升序排列的。
输入描述: 输入两升序字符串输出描述: 融合后的字符串 (含回车符)样式输入:
acefi bdfg
样式输出:
abcdeffgi
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <stdio.h> #include <string.h> int main () { char a[162 ],b[81 ]; int i,j,len,temp; scanf ("%s" ,a); scanf ("%s" ,b); strcat (a,b); len=strlen (a); for (i=0 ;i<len-1 ;i++) { for (j=i+1 ;j<len;j++) { if (a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } } puts (a); return 0 ; }
一清二楚—字符串统计 题目描述: 输入一字符串,该字符串包含字母、数字和其他字符。统计该字符串中数字、字母和其他字符出现的频率。(注意,其他字符包含空格)输入描述: 一混合字符串,最大长度为200输出描述描述: 各类字符出现频率,最后一行不含回车。样式输入:
abcdefg9999////
样式输出:
ch:7 num:4 other:4
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <stdio.h> #include <string.h> main() { 1 : char a[201 ]; int ch=0 ,num=0 ,other=0 ,i,k; gets(a); k=strlen (a); for (i=0 ;i<k;i++) { if ((a[i]>='A' &&a[i]<='Z' )||(a[i]>='a' &&a[i]<='z' )) ch++; else if (a[i]>='0' &&a[i]<='9' ) num++; else other++; } printf ("ch:%d\nnum:%d\nother:%d" ,ch,num,other); }
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> #include <string.h> int main () { char a[200 ]; int ch=0 ,num=0 ,other=0 ,len,i; gets(a); len=strlen (a); for (i=0 ;i<len;i++) { if (a[i]>='0' && a[i]<='9' ) num++; else if ((a[i]>='a' && a[i]<='z' ) || (a[i]>='A' && a[i]<='Z' )) ch++; else other++; } printf ("ch:%d\nnum:%d\nother:%d" ,ch,num,other); return 0 ; }
克隆—字符串的拷贝(胡宁静) 题目描述: 编写程序实现字符串拷贝,输入两字符串(字符串长度小于100),将第一个字符串拷贝到第二个字符串中;如果第一个字符串的长度a小于第二个字符串长度b,则第二个字符串的长度也将缩减至第一个的长度a,如果第一个字符串的长度a大于或等于第二个长度b,则只将a的前b个字符拷贝到第二个中;输入描述: 输入两字符串输出描述描述: 输出第二个字符串,注意:输出含回车。样式输入:
Abdfeg Bdfad
样式输出:
Abdfe
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> #include <string.h> int main () { char a[100 ],b[100 ]; int len1,len2,i; scanf ("%s %s" ,a,b); len1=strlen (a); len2=strlen (b); if (len1<len2) { for (i=0 ;i<len1;i++) b[i]=a[i]; b[len1]='\0' ; } else { for (i=0 ;i<len2;i++) b[i]=a[i]; } puts (b); return 0 ; }
2:源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> #include <string.h> int main () { int len1,len2,i; char a[100 ],b[100 ]; gets(a); gets(b); len1=strlen (a); len2=strlen (b); if (len1<len2) for (i=0 ;i<len1;i++) printf ("%c" ,a[i]); else { for (i=0 ;i<len2;i++) printf ("%c" ,a[i]); } return 0 ; }
字母转换 题目描述: 输入一个字符串(长度<100),将其中所有大写字母改为小写字母,而所有小写字母全部改为大写字母,其余字符原样输出然后输出前n个字符。 设计步骤 ①输入字符串; ②用循环判断字符串中的每个字符是大写还是小写,若是大写要转换成小写,是小写要转换成大写:大写与小写字母的转换关系是“小写字母=大写字母+32” ③用printf输出该字符串前n个字符。输入描述: 输入数据为1个数字,表示输出字符窜长度(n<100),接着输入1个字符串,其长度不限,可包含键盘上可见的所有字符输出描述描述: 输出为1个字符串,根据输入数据,将其中的大写字符转换成小写,小写转换成大写,其余字符不变样式输入:
5 FG56hj
样式输出:
fg56H
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <stdio.h> int main () { int n,i; char a[100 ]; scanf ("%d" ,&n); getchar(); gets(a); for (i=0 ;i<n;i++) { if (a[i]<='z' && a[i]>='a' ) printf ("%c" ,a[i]-32 ); else if (a[i]<='Z' && a[i]>='A' ) printf ("%c" ,a[i]+32 ); else printf ("%c" ,a[i]); } return 0 ; }
数字转换 题目描述: 输入一个数字,大小<100000,将其中每位数字进行转换后输出,规则如下: 数字0与9互换、1与8互换、2与7互换、3与6互换、4与5互换。 注意:要考虑首位数字为9时的转换结果。输入描述: 输入数据为1个数字,大小<100000输出描述描述: 输出为1个根据转换规则转换完成后的数字样式输入:
56789
样式输出:
43210
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 #include <stdio.h> #include <string.h> int main () { char a[6 ]; int i,len; scanf ("%s" ,a); len=strlen (a); if (a[0 ]!='9' ) { if (a[0 ]=='1' ) printf ("8" ); if (a[0 ]=='2' ) printf ("7" ); if (a[0 ]=='3' ) printf ("6" ); if (a[0 ]=='4' ) printf ("5" ); if (a[0 ]=='5' ) printf ("4" ); if (a[0 ]=='6' ) printf ("3" ); if (a[0 ]=='7' ) printf ("2" ); if (a[0 ]=='8' ) printf ("1" ); } for (i=1 ;i<len;i++) { if (a[i]=='0' ) printf ("9" ); if (a[i]=='1' ) printf ("8" ); if (a[i]=='2' ) printf ("7" ); if (a[i]=='3' ) printf ("6" ); if (a[i]=='4' ) printf ("5" ); if (a[i]=='5' ) printf ("4" ); if (a[i]=='6' ) printf ("3" ); if (a[i]=='7' ) printf ("2" ); if (a[i]=='8' ) printf ("1" ); if (a[i]=='9' ) printf ("0" ); } return 0 ; }
函数求解1/n的累乘 题目描述: 利用自定义函数编写程序,求下面的式子: Y=11/2 1/3……*1/n (n的数值由键盘输入,n<=10)
输入描述: 输入一个正整数
输出描述描述: 输出为小数,保留小数点后12位有效数字。样式输入:
3
样式输出:
0.166666666667
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> int main () { int n,i; double s,y=1 ; scanf ("%d" ,&n); for (i=1 ;i<=n;i++) { s=i; y*=1 /s; } printf ("%.12lf" ,y); return 0 ; }
函数求解1/n的累减(谌海军) 题目描述: 利用自定义函数编写程序,求下面的式子: Y=1-1/2-1/3……-1/n (n的数值由键盘输入,n<=100)输入描述: 输入一个正整数输出描述描述: 输出为小数,保留小数点后8位有效数字。样式输入:
8
样式输出:
-0.71785714
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> int main () { int n,i; double s,y=1 ; scanf ("%d" ,&n); for (i=2 ;i<=n;i++) { s=i; y-=1 /s; } printf ("%.8lf" ,y); return 0 ; }
换汽水 题目描述: 1块钱1瓶汽水,3个空汽水瓶换1瓶汽水。n块钱能喝几瓶汽水?输入描述: 输入为一个正整数n(1<=n<=100),表示钱数。输出描述描述: 输出为一个正整数,表示可喝汽水的瓶数。样式输入:
10
样式输出:
15
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <stdio.h> int main () { int n,sum,s; scanf ("%d" ,&n); sum=n; while (n) { if (n==2 ) { sum+=1 ; break ; } if (n<2 ) break ; s=n/3 ; sum+=s; n=n%3 +s; } printf ("%d" ,sum); return 0 ; }
聪明的顾客 题目描述: 1瓶汽水卖1块钱,顾客还可以用3个空汽水瓶换1瓶汽水喝。请问聪明的顾客最少可以花多少钱买到n瓶汽水喝? 说明:当顾客手中有两个空汽水瓶的时候,如果店家剩余1瓶以上,可以选择先借用1瓶汽水,喝完后连同手里先前已有的两个空汽水瓶还给店家即可。输入描述: 输入为一个正整数n(1<=n<=100),表示可卖汽水瓶数。输出描述描述: 输出为一个正整数,表示所花钱数。样式输入:
10
样式输出:
7
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #include <stdio.h> int main () { int n,sum,s,i,k,a[70 ]={0 ,1 }; scanf ("%d" ,&n); for (i=2 ;i<70 ;i++) { k=i; sum=i; while (i) { if (i==2 ) { sum+=1 ; break ; } if (i<2 ) break ; s=i/3 ; sum+=s; i=i%3 +s; } i=k; a[i]=sum; } for (i=0 ;i<70 ;i++) if (a[i]==n) { printf ("%d" ,i); break ; } return 0 ; }
字符串起始位置 题目描述: 有字符串a(长度<=100),b(长度<=10),计算b串在a串中首次出现的位置。输入描述: 输入为两个字符串,第一个字符串长度小于100,第二个字符串长度小于10; 输出描述描述: 若b串在a串中出现,输出为一个正整数,表示b串在a串中首次出现的位置,若b串未出现在a串中,则输出0;样式输入:
abcdefghijklmnababcdeabc abc
样式输出:
1
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #include <stdio.h> #include <string.h> int main () { int len1,len2,i,j,sum=0 ,n=0 ,k; char a[100 ],b[10 ]; scanf ("%s" ,a); scanf ("%s" ,b); len1=strlen (a); len2=strlen (b); for (i=0 ;i<len1;i++) { k=i; for (j=0 ;j<len2;j++) { if (a[i]==b[j]) sum++; else break ; i++; } i=k; if (sum==len2) { printf ("%d" ,i+1 ); n++; break ; } sum=0 ; } if (n==0 ) printf ("0" ); return 0 ; }
字符串清理 题目描述: 假定输入的字符串中只包含字母和号。请编写函数fun,它的功能是:将字符串尾部的 号全部删除,前面和中间的*号不删除。输入描述: 输入为一个字符串,字符串长度小于100;
输出描述描述: 输出为清理后的字符串;
样式输入:
ABC DEFG
样式输出:
*A BC*DEF G
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> #include <string.h> fun(char a[]) { int len,i,s; len=strlen (a); for (i=len-1 ;i>=0 ;i--) if (a[i]!='*' ) { a[i+1 ]='\0' ; break ; } } int main () { char a[100 ]; int i,len; scanf ("%s" ,a); fun(a); len=strlen (a); for (i=0 ;i<len;i++) printf ("%c" ,a[i]); return 0 ; }
围圈报数游戏 题目描述: 有n(n<=100)围成一圈,顺序排号(从1排到n)。 从第一个人开始报数(从1报到m(m<=9)),凡报到m的人退出圈子,此时报数顺序调转,如:11个人围成1圈,从1报到4时,原来4号位的人退出,此时调转顺序报数,原来3号位的人报数1,原来2号位的人报数2,原来1号位的人报数1,原来11号位的人报数4,此时11号位的人退出游戏,再次逆转顺序报数,以此类推,问最后留下的是原来第几号的那位?输入描述: 输入为两个正整数,第一个<=100,第二个<=9;输出描述: 输出为一个正整数;样式输入:
11 4
样式输出:
3
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 #include <stdio.h> int main () { int n,m,i,j,k1=0 ,k2=0 ,z1,sum1,sum2,a[101 ]; scanf ("%d%d" ,&n,&m); for (i=1 ;i<=n;i++) a[i]=1 ; sum1=n; z1=1 ; sum2=0 ; while (sum1!=1 ) { for (i=z1;i<=n;i++) { if (a[i]!=0 ) { k1++; if (k1==m) { a[i]=0 ; sum1--; if (sum1==1 ) break ; while (sum2==0 ) { for (j=i-1 ;j>0 ;j--) if (a[j]!=0 ) { k2++; if (k2==m) { a[j]=0 ; sum2++; sum1--; k2=0 ; break ; } } i=n+1 ; } z1=j; k1=0 ; sum2=0 ; } } } z1=1 ; } for (i=1 ;i<=n;i++) if (a[i]!=0 ) printf ("%d" ,i); return 0 ; }
报数游戏 题目描述: 有n(n<=100)围成一圈,顺序排号(从1排到n)。从第一个人开始报数(从1一直往上报数),凡报到m及m的倍数或者尾数为m的人退出圈子,问最后留下的是原来第几号的那位?输入描述: 输入为两个正整数,第一个<=100,第二个<=9;输出描述: 输出为一个正整数;样式输入:
10 3
样式输出:
5
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <stdio.h> int main () { int n,m,i,sum,a[101 ],k=0 ; scanf ("%d%d" ,&n,&m); sum=n; for (i=1 ;i<=n;i++) a[i]=1 ; while (sum!=1 ) for (i=1 ;i<=n;i++) if (a[i]!=0 ) { k++; if (k%m==0 ) { a[i]=0 ; sum--; } } for (i=1 ;i<=n;i++) if (a[i]!=0 ) printf ("%d" ,i); return 0 ; }
整数各位取偶数 题目描述: 将一个整数中的每一位上为偶数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。 例如,当s中的数为:87653142时,t中的数为:8642。 (知识点:控制语句、函数、指针)输入描述: 输入数据为一个不大于100000000的整形数;输出描述描述: 输出数据为一个不大于100000000的整形数;样式输入:
987654321
样式输出:
8642
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <stdio.h> int main () { int s,i,k=0 ; int a[100 ]; scanf ("%d" ,&s); while (s) { if ((s%10 )%2 ==0 ) a[k++]=s%10 ; s/=10 ; } for (i=k-1 ;i>=0 ;i--) printf ("%d" ,a[i]); return 0 ; }
五位反序数 题目描述: 设N是一个五位数,它的n倍恰好是其反序数(例如:123的反序数是321), 编程,输出一个满足条件的N。(知识点:控制语句)输入描述: 输入为一个整形数n(2<=n<=9)输出描述描述: 输出为一个五位数的整形数样式输入:
9
样式输出:
10989
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <stdio.h> int fan (int n) { int law=0 ,b; while (n>0 ) { b=n%10 ; law=law*10 +b; n/=10 ; } return law; } void main () { int n,N; scanf ("%d" ,&n); for (N=10000 ;N<100000 ;N++) if (N*n==fan(N)) { printf ("%d" ,N); break ; } }
复制字符串 题目描述: 有一个字符串,包括n个字符。写一个函数,将此字符串从第a个字符开始的b个字符复制成另一个字符串。 要求在主函数输入字符串及a,b的值并输出复制结果。 (知识点:控制语句、字符串、指针)
输入描述: 输入为一个字符串(长度小于80)及两个整形数(a+b小于字符串的实际长度)输出描述: 输出为一个字符串样式输入:
abcdefghijklmnopqrst 8 5
样式输出:
hijkl
源代码
1 2 3 4 5 6 7 8 9 10 11 12 #include <stdio.h> #include <string.h> void main () { char a[80 ],b[80 ]={0 }; int i,x,y,j; gets(a); scanf ("%d %d" ,&x,&y); for (i=x-1 ,j=1 ;j<=y;j++,i++) b[j-1 ]=a[i]; puts (b); }
增加的兔子 题目描述: 古典问题,有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问一年之内每个月的兔子总数为多少?输入描述: 无输出描述描述: 输出一年之中每个月的兔子总数。样式输入:
无
样式输出:
1 1 2 3 5 8 13 21 34 55 89 144
源代码
1 2 3 4 5 6 7 8 9 10 11 #include <stdio.h> int main () { int a[12 ]={1 ,1 },i; for (i=2 ;i<12 ;i++) a[i]=a[i-1 ]+a[i-2 ]; for (i=0 ;i<11 ;i++) printf ("%d " ,a[i]); printf ("%d" ,a[11 ]); return 0 ; }
整数的分解 题目描述: 将一个正整数分解质因数。例如:输入90,打印出90=23 3*5。输入描述: 输入一个正整数。输出描述描述: 等式左边输出整数,等式右边整数相乘形式。
样式输入:
90
样式输出:
90=2x3x3x5
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #include <stdio.h> int main () { int a[50 ],i=2 ,j,n,sum=0 ,k=0 ,b[50 ]={0 },z; while (k!=50 ) { for (j=1 ;j<=i;j++) if (i%j==0 ) sum++; if (sum==2 ) { a[k]=i; k++; } sum=0 ; i++; } scanf ("%d" ,&n); k=0 ; z=n; while (n!=1 ) { for (i=0 ;i<50 ;i++) if (n%a[i]==0 ) { n=n/a[i]; b[k]=a[i]; k++; break ; } } printf ("%d=" ,z); for (i=0 ;i<k-1 ;i++) printf ("%d*" ,b[i]); printf ("%d" ,b[k-1 ]); return 0 ; }
小球自由落体问题 题目描述: 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?输入描述: 无输出描述描述: 小球在第10次落地时经过的路程数sn和第10次反弹的高度hn。 样式输入:
无
样式输出:
the total of road is 299.609375 the tenth is 0.097656 meter
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h> int main () { int i; double sn,a[11 ]={100 }; sn=100 ; for (i=2 ;i<=10 ;i++) { a[i-1 ]=a[i-2 ]/2.0 ; sn+=2 *a[i-1 ]; } a[10 ]=a[9 ]/2.0 ; printf ("the total of road is %lf\n" ,sn); printf ("the tenth is %lf meter" ,a[10 ]); return 0 ; }
统计字符 题目描述: 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数输入描述: 输入包含英文字母、空格、数字和其他字符的字符串输出描述: 输出英文字母,空格,数字和其他字符的个数样式输入:
avc i2g3 &*#4
样式输出:
5,2,3,3源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <stdio.h> #include <string.h> int main () { char a[100 ]; int len,i,s1=0 ,s2=0 ,s3=0 ,s4=0 ; gets(a); len=strlen (a); for (i=0 ;i<len;i++) { if ((a[i]>='a' &&a[i]<='z' )||(a[i]>='A' &&a[i]<='Z' )) s1++; else if (a[i]==' ' ) s2++; else if (a[i]<='9' && a[i]>='0' ) s3++; else s4++; } printf ("%d,%d,%d,%d" ,s1,s2,s3,s4); return 0 ; }
数a求和 题目描述: 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制输入。输入描述: 输入基数a和需要相加的个数n输出描述描述: 输出相加的结果,注意结果最后不需要回车换行。样式输入:
2 5
样式输出:
24690
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h> int main () { int i,j,n,a,s,z,w; scanf ("%d%d" ,&a,&n); for (s=0 ,i=1 ;i<=n;i++) { for (j=1 ,w=1 ,z=0 ;j<=i;j++) { z+=a*w; w*=10 ; } s+=z; } printf ("%d" ,s); return 0 ; }
统计单词个数 题目描述: 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。例如,输入:I am a boy,里面包含了四个英文单词。输入描述: 利用gets输入字符。输出描述描述: 输出单词个数,程序最后不需要回车换行。样式输入:
I am a boy
样式输出:
There are 4 words in the line
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h> #include <string.h> int main () { char a[100 ]; int len,i,b[26 ]={0 },sum=1 ; gets(a); len=strlen (a); for (i=0 ;i<len;i++) { if (a[i]==' ' ) sum++; } printf ("There are %d words in the line" ,sum); return 0 ; }
三角形求最大和的问题 题目描述: 如图所示是一个由数字组成的三角形,编写程序按照某条路线遍历从第一行的首数字到最后一行的某个数,使每一行经过的数字相加的和为最大值,每一次跳转可以向左下方或者右下方进行。例如样图中第一行为7,选择左下方的数字3的话,继续选择左下方的数字8,第四行选择右下方的7,最后到达左下方的数字5。这样,7+3+8+7+5=30为最大。
7
3 8
8 1 0
2 7 4 4 4 5 2 6 5输入描述: 先由键盘输入三角形的行数N(1<N<=100),接下来输入每行的数字,数字取值范围为0~99。输出描述描述: 输出计算出的数字相加和的最大值。样式输入:
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
样式输出:
30
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <stdio.h> int main () { int a[100 ][100 ],i,j,n,max=0 ; scanf ("%d" ,&n); for (i=0 ;i<n;i++) for (j=0 ;j<=i;j++) scanf ("%d" ,&a[i][j]); a[1 ][0 ]+=a[0 ][0 ]; a[1 ][1 ]+=a[0 ][0 ]; for (i=2 ;i<n;i++) { a[i][0 ]+=a[i-1 ][0 ]; for (j=1 ;j<i;j++) a[i][j]+=(a[i-1 ][j-1 ]>a[i-1 ][j])?a[i-1 ][j-1 ]:a[i-1 ][j]; a[i][j]+=a[i-1 ][j-1 ]; } for (i=0 ;i<n;i++) if (a[n-1 ][i]>max) max=a[n-1 ][i]; printf ("%d" ,max); return 0 ; }
节约字节 题目描述: John在做一个项目,项目对存储容量有着近乎苛刻的要求,为此John需要对一些东西进行压缩存储。John的第一个问题就是一大堆的字符串,存储它们太占地方了,为此他想了一个办法:如果字符串具有相同的后缀,那么就把这么字符串的相同后缀和在一起,这样就能节约一点空间了。比如说有三个字符串分别为”john”、”ajohn”和”bjohn”,这样它们有相同的后缀”john”,这时候只需存储一个后缀”john”,节省了8个字母的存储空间。请编写程序计算对于不同的字符串能节省的存储空间?输入描述: 第一行是一个整数k,表示可以输入多少个测试用例.每个测试用例占n+1行即每个测试用例的第一行为一个整数n(1<=n<=20),从第二行开始依次为n个字符串,字符串由英文字母组成,大小写敏感。输出描述 一个测试用例输出完毕之后,换行输出这个测试用例节省了多少存储空间。样式输入 :
1 3 john ajohn bjohn
样式输出:
save 8 characters
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 #include <stdio.h> #include <string.h> int main () { int a[20 ]={0 },i,n,k,j,z,m,t,len[20 ],min; char s[20 ][100 ]; scanf ("%d" ,&k); while (k) { i=0 ; scanf ("%d" ,&n); z=n; while (z) { scanf ("%s" ,s[i]); i++; z--; } for (i=0 ;i<n;i++) len[i]=strlen (s[i]); for (j=1 ;j<n;j++) { m=len[0 ]-1 ; t=len[j]-1 ; while (j) { if (s[0 ][m]==s[j][t]) a[j]++; else break ; m--; t--; if (m<0 ||t<0 ) break ; } } min=a[1 ]; for (i=2 ;i<n;i++) if (min>a[i]) min=a[i]; min*=n-1 ; printf ("save %d characters\n" ,min); k--; for (i=1 ;i<n;i++) a[i]=0 ; } return 0 ; }
猴子吃桃问题 题目描述 : 猴子第一天摘下若干桃子,吃了一半,还不过瘾,又多吃了一个。第二天吃掉剩下桃子的一半,又多吃了一个。以此类推,到第10天时,就只有一个桃子了。问猴子第一天摘下了多少桃子?输入描述: 无输出描述描述: 猴子摘下桃子的总数,注意程序最后不需要回车换行。样式输入:
无
样式输出:
1534
源代码
1 2 3 4 5 6 7 8 9 #include <stdio.h> int main () { int i,sum=1 ; for (i=1 ;i<10 ;i++) sum=(sum+1 )*2 ; printf ("%d" ,sum); return 0 ; }
2源代码
1 2 3 4 5 6 7 8 9 10 #include <stdio.h> int main () { int n,i,sum=1 ; scanf ("%d" ,&n); for (i=1 ;i<n;i++) sum=(sum+1 )*2 ; printf ("%d" ,sum); return 0 ; }
更多 更多题库链接,