今天做了一些题目。个人认为可以记录下来的有这些:
经对杨辉三角形的观察,其各行的系数有以下的规律:
1.各行第1个数都是1。
2.各行最后一个数都是1。
3.从第3行起,除上面指出的第1个数和最后一个数外,其余各数是上一行同列和前一列两个数之和。可以这样表示:a[i][j]=a[i-1][j]+a[i-1][j-1]。其中,i为行数,j为列数。
程序如下:
#include<stdio.h> int main() { int a[20][20]; int i,j; for(i=0;i<10;i++) { a[i][i]=1; //使对角线元素的值为1 a[i][0]=1; //使第1列元素的值为1 } for(i=2;i<10;i++) //从第3行开始处理 { for(j=1;j<=i-1;j++) { a[i][j]=a[i-1][j-1]+a[i-1][j]; } } for(i=0;i<10;i++) { for(j=0;j<=i;j++) { printf("%5d",a[i][j]); //输出数组各元素的值 } printf("\n"); } return 0; }
若要输出前n行,只需将10改为所要求的n,将n输入即可。
本人的程序可能较为繁琐,还望指教。
YRZ学长想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助YRZ学长完成“去重”与“排序”的工作。
第2行有N个用空格隔开的正整数,为所产生的随机数。
输出有2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
10 20 40 32 67 40 20 89 300 400 15
8 15 20 32 40 67 89 300 400
代码如下:
#include<stdio.h> int main() { int a[1100]= {0}; int i,t,n,c=0; scanf("%d",&n); for(i=0; i<n; i++) //使用桶排法来记录各数出现的次数,同时进行去重 { scanf("%d",&t); if(a[t]<1) { a[t]++; c=c+1; } } printf("%d\n",c); for(i=0; i<=1000; i++) //按升序输出各数 { if(a[i]>0) { printf("%d ",i); a[i]--; } } return 0; }
这个题目卡了我较长时间,终于在老师、学长、同学的帮助下做出来了。
代码如下:
#include<stdio.h> int main() { int a[3]= {0},b[3]= {0}; int n,i,j,k,max,min; scanf("%d",&n); for(i=0; i<n; i++) { for(j=0; j<3; j++) { scanf("%d",&a[j]); } max=a[0]; //假设一个最大值 k=1; if(max==a[1]) //统计max出现的次数 k++; else if(max<a[1]) max=a[1]; if(max==a[2]) k++; else if(max<a[2]) max=a[2]; if(a[0]==max&&k==1) //根据各数情况给数组b赋值 b[0]=0; else if(a[0]==max&&k>1) b[0]=1; else b[0]=max-a[0]+1; if(a[1]==max&&k==1) b[1]=0; else if(a==max&&k>1) b[1]=1; else b[1]=max-a[1]+1; if(a[2]==max&&k==1) b[2]=0; else if(a==max&&k>1) b[2]=1; else b[2]=max-a[2]+1; for(k=0; k<3; k++) //输出结果 printf("%d ",b[k]); printf("\n"); } return 0; }
代码比较多,如有可以1完善的地方还请指教。
LeeLdler有一个小黑盒,小黑盒里面有n个小球,每个小球的编号为1到n,所以每个小球都不一样。LeeLdler打算从小盒里直接摸m个球,问摸到的球有多少种情况。
例如一共有四个球,LeeLdler摸两个,可能摸到1 2,1 3,1 4,2 3,2 4,3 4六种情况。
多组输入,对于每组数据输入为一行,输入n,m以一个空格隔开。1<=m<=n<=10。
输出有多少种情况。
4 2
6
个人思路:
这个题目可以用高中知识解答,代码比较简洁。
代码如下:
#include <stdio.h> int main() { int n,m,i,j; int s; while(scanf("%d%d",&n,&m)!=EOF) //多组输入 { s=1; for(i=n,j=1; j<=m; i--,j++) //运用到高中的排列组合 { s=s*i/j; } printf("%d\n",s); } }
Little Petya喜欢礼物。 他的妈妈送给他两个长度相同的字符串作为礼物。 字符串由大写和小写字母组成。 现在Petya想按字典序比较这两个字符串。 但是字母的大小写无关紧要,即大写字母被认为等同于相应的小写字母。 请帮助Petya执行比较。
Input
每个测试点包含两行字符串,长度为1 to 100 .保证长度相等且包含大小写字母
Output
如果第一行小于第二行,输出 "-1". 如果第二行小于第一行,输出"1". 如果相等,输出"0".注意比较时要忽略字母的大小写
Examples
Input
aaaa aaaA
Output
0
Input
abs Abz
Output
-1
Input
abcdefg AbCdEfF
Output
1
代码如下:
#include<stdio.h> #include<string.h> int main() { char str1[110],str2[110]; scanf("%s",str1); scanf("%s",str2); strlwr(str1); strlwr(str2); //将str1,str2全部转化为小写字母组成的字符串 if(strcmp(str1,str2)>0) printf("1"); else if(strcmp(str1,str2)<0) printf("-1"); else printf("0"); }
这些代码可能还有许多的不足之处,还望斧正。