//题目22:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定 //比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x, z比,请编程序找出 //三队赛手的名单。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<math.h> //分析:c说他不和x, z比,那么确定c--y;a说他不和x比,那么确定a--z,剩下的就是b--x; void main(){ char ch1=0, ch2=0,ch3=0; for (ch1 = 'x'; ch1 < 'z'+1; ch1++) { for (ch2 = 'x'; ch2 < 'z'+1; ch2++) { if (ch1 != ch2) { for (ch3 = 'x'; ch3 < 'z'+1; ch3++) { if ((ch1 != ch3)&&(ch2!= ch3)) { if ((ch3 != 'x') && (ch3 != 'z') && (ch1 != 'x')) { printf("\n三队赛手的名单A==%c;B==%c;C==%c", ch1, ch2, ch3); } } } } } } system("pause"); }
//题目23:打印出如下图案(菱形) #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<math.h> //分析:出现行,列那么就需要使用for循环 //一种方案 行一个for循环,把这个图形看成上下两部分,再用2个for循环 //我的方案我画菱形,一般是画一个正方形,4个正方形就可以拼成一个菱形 // void main(){ //行 for (int i = 3; i>-4; i--) { //空白列 for (int j = 0; j < abs(i); j++) { printf(" "); } //*号列 //4-abs(i)-1;这里的4是一个正方形的宽,4-abs(i)是求出一个正方形内*号的个数 //菱形的上半部部分是2个正方形,但是2个正方形共用了中间竖着的一条*,所以4-abs(i)-1,挖去中间一条 //2 * (4 - abs(i) - 1)就是刨除中间一个*后的个数 //2 * (4 - abs(i) - 1) + 1把中间一个*再加上 for (int j = 0; j < 2 * (4 - abs(i) - 1) + 1; j++) { printf("*"); } //每行换行 printf("\n"); } system("pause"); }
//题目24:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<math.h> //分析,通过观察,分子的规律是f(n)=f(n-1)+f(n-2);分母也有类似的规律 //这个可以用递归实现,但是递归实现f(n)=f(n-1)+f(n-2)没有数组效率,所以用数组实现 //因为分子分母相差1,所以我可以忽略分子,只要构建分母的数组就可以了 void main(){ int arr[30] = { 1,2 }; //这里我构建是30个元素的数组而不是20个,是因为分子与分母相差了1一个,正确应该是21,我为了简便直接定义了30个 //给数组赋值 for (int i = 2; i < 30; i++) { arr[i] = arr[i - 1] + arr[i - 2]; } double sun = 0.0; for (int i = 0; i < 20; i++) { sun += (double)arr[i + 1] /(double) arr[i]; } printf("这个数列的前20项之和是%lf", sun); system("pause"); }