7.入门 计算圆柱的侧面积及体积
#include double a,b; scanf(\"%lf\\n%lf\ printf(\"s=%.2lf,v=%.2lf\\n\} 1. Hello world. 输入:无 输出:Hello world. 程序: #include printf(\"Hello world.\\n\"); return 0; } 2. Welcome to Beijing. 实用文档. . 程序: #include printf(\"Welcome\\n\"); printf(\"to\\n\"); printf(\"Beijing.\\n\"); return 0; } 3. 求A+B 输入:整数1 整数2 输出:整数1+整数2=和 程序: #include int main() { int a,b; scanf(\"%d\ scanf(\"%d\ printf(\"%d+%d=%d\\n\ return 0; } 4. 求 x 的 3次方 输入:一个整数。 输出:该整数的 3 次方值。 实用文档. . 程序: #include int main() { int x; scanf(\"%d\ printf(\"%d\\n\ return 0; } 5. 学习打印你的第一个图形 编写一个小程序,要求输出的是 4 行由*号组成的等腰三角形。 程序: #include int main() { printf(\" *\\n\"); printf(\" ***\\n\"); printf(\" *****\\n\"); printf(\"*******\\n\"); return 0; } 6. 一年级的算术题 输入: 接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123 444 输出:分别输出按照整型数据进行 +、-、*、/、* 之后的运行结果。 实用文档. . 程序: #include int main() { int a,b; scanf(\"%d %d\ printf(\"%d+%d=%d\\n\ printf(\"%d-%d=%d\\n\ printf(\"%d*%d=%d\\n\ printf(\"%d/%d=%d\\n\ printf(\"%d%%%d=%d\\n\ return 0; } 7. 求两个变量的最小值 输入:两个整型数 输出:两个整型值中的最小值 程序: #include int main() { int a,b; scanf(\"%d%d\ printf(\"min=%d\\n\ return 0; } 8. 判断三角 实用文档. 形的形状 . 输入:三角型的3条边的长度〔int型〕。 输出:等边三角形:equilateral triangle 等腰三角形:isoceles triangle 不构成三角形:non-triangle 一般三角形:triangle 程序: #include int main() { int a,b,c; scanf(\"%d%d%d\ if(a+b>c&&a+c>b&&b+c>a) { if (a==b&&b==c&&a==c) printf(\"equilateral triangle.\\n\"); else if(a==b||a==c||b==c) printf(\"isoceles triangle.\\n\"); else printf(\"triangle.\\n\"); } else printf(\"non-triangle.\\n\"); return 0; } 9. 计算圆柱的侧面积及体积 输入 :第一 第二行 行输入 输入 圆柱 圆 的柱 底面的 半高 径 r h 实用文档. . 输出:s=< 圆柱的侧面积 >,v=< 圆柱的体积 > 要 1. 所有变量都定义2. 结果精确到小数点后两位 为双精度类 求 型 程序: #include int main() { double r,h,s,v; scanf(\"%lf\ scanf(\"%lf\ s=2*PI*r*h; v=PI*r*r*h; printf(\"s=%.2f,v=%.2f\\n\ return 0; } 10. 计算时钟的夹角 背景: 钟面上的时针和分针之间的夹角总是在 0 ~180之间 ( 包括 0 和180 ) 。举例来说,在十二点的时候两针之间的夹角为 0 ,而在六点的时候夹角为180 ,在三点的时候为90 。此题要解决的是计算 12:00 到 11:59 之间任意一个时间的夹角。 输入: 每组测试数据包含两个数字:第一个数字代表小时 ( 大于 0 小于等于 12) ,第二个数字代表分 ( 在区间 [0, 59] 上 ) 。 输出: 对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。输出格式如下所示。 实用文档. . 程序: #include #include int h,m; float d1,d2,d; scanf(\"%d%d\ d1=30*(h+m/60.0); d2=m*360/60.0; d=fabs(d1-d2); if(d>180) d=360-d; printf(\"At %d:%d the angle is %.1f degrees.\\n\ return 0; } 11. 找出最大素数 素数是指一个只能被1和它本身整除的数,在数论中占有重要的研究地位,在当代密码学中也被广泛应用。 输入:取值范围 输出:该范围内的最大素数 实用文档. . 程序: #include int main() { int n,i,j; scanf(\"%d\ for(i=n;i>=1;i--) { for(j=2;jif(j==i) { printf(\"The max prime number is %d.\\n\ break; } } } 12. 求最后3位数值 输入:a 和 n 的值。假设 a<=150 。 输出:求 a 的 n 次方的最后 3 位数。 实用文档. . 程序: #include long int s=1; int a,n,i=1,t=1; scanf(\"%d%d\ if(n==0) printf(\"The last 3 numbers is 1.\\n\"); else { for(i=1;i<=n;i++) { s=(s*a)%1000; } t=s%1000; if(t>=0&&t<10) printf(\"The last 3 numbers is 00%d.\\n\ if(t>=10&&t<100) printf(\"The last 3 numbers is 0%d.\\n\ if(t>=100&&t<1000) printf(\"The last 3 numbers is %d.\\n\ } return 0; } 13. 贪吃的猴子 有一只猴子,第一天摘了假设干个桃子 ,当即吃了一半,但还觉得不过瘾 ,就又多吃了一个。第2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了两个。以后每天早上都吃了前一天剩下的一半加天数个〔例如,第5天吃了前一天剩下的一般加5个〕。到第n天早上再想吃的时候,就只剩下一个桃子了。 输入:天数n 输出:第一天的桃子个数 程序: #include int main() { int 实用文档. i,n,amount=1; . scanf(\"%d\ for(i=n-1;i>=1;i--) amount=2*(amount+i); printf(\"The monkey got %d peachs in first day.\\n\ } 14. 黑色星期五 在西方,星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的十三日又恰逢星期五就叫“黑色星期五〞。 输入:年份 输出:判断该年是否包含黑色星期五,如包含,给出具体日期 程序: #include int main() { int i,n=0,year,month[12]={0}; int a[13]={0,13,44,73,104,134,165,195,226,257,287,318,348}; int b[13]={0,13,44,72,103,133,164,194,225,256,286,317,347}; scanf(\"%d\ for(i=1;i<13;i++) { if ((year%4==0 && year%100!=0)||year%400==0) { if((year-1+((year-1)/4)-((year-1)/100)+((year-1)/400)+a[i])%7==5) { n++; month[n]=i; } } else if((year-1+((year-1)/4)-((year-1)/100)+((year-1)/400)+b[i])%7==5) { n++; 实用文档. . month[n]=i; } } if(n==1) { printf(\"There is %d Black Friday in year %d.\\n\ printf(\"It is:\\n\"); printf(\"%d/%d/13\\n\ } else { printf(\"There are %d Black Fridays in year %d.\\n\ printf(\"They are:\\n\"); for (i=1;i<=n;i++) { printf(\"%d/%d/13\\n\ } } return 0; } 15.你会输出一行星号? 我们才开始上机,现在需要我们用最简单得方法,在一行中输出N个星号。 输入:N值 输出:一行中N个星号。 程序: #include int main() 实用文档. . { int i,n; scanf(\"%d\ for(i=1;i<=n;i++) printf(\"*\"); printf(\"\\n\"); } 16. 计算SUM的值 公式:SUM = 1 + 1/2 + 1/3 + 1/4 + ... + 1/n 输入: n 输出: 表达式 sum 的值。结果保存 6 位小数。 程序: #include int main() { int i,n; double sum=0; scanf(\"%d\ for (i=1;i<=n;i++) sum+=1.0/i; printf(\"sum=%.6lf\\n\ return 0; } 17. 寻找特殊整数 请编写一个程序寻找一种特殊整数:一个 n 位的正整数等于其各位数字的n次方之和。例如:407=4×4×4+0×0×0+7×7×7。所以407就是一个特殊数。 输入:正整数的位数n〔n<=6〕。 输出: 所有此n位特殊数。每个数占一行。假设不存在符合条件的特殊数,那么输出提示:“No output.〞;假设存在,那么从小到大进行输出。 说明: 实用文档. . 假设输入为4,在4位整数中,有3个4位的特殊数,那么输出格式为〔输出中的1111、2222和9999并不是4位特殊数,只是格式样例〕: 1111 2222 9999 程序: #include #include int n,i,j,num,t,s=0,t1,flag=0; scanf(\"%d\ t=pow(10,n-1); for (i=t;i for (j=1;t1!=0;j++) { num=t1%10; s+=pow(num,n); t1=t1/10; } if(s==i) { flag=1; printf(\"%d\\n\ } } if(flag==0) printf(\"No output.\\n\"); return 0; } 18. 空心的倒三角型 输入:输入三角形的高度 实用文档. 〔h >= 0〕。 . 输出:打印相应的空心倒三角形。图样参见测试用例。 程序: #include int i,j,h; scanf(\"%d\ for (i=1;i<=h;i++) { for(j=1;jfor(j=1;j<=2*(h-i)+1;j++) printf(\"*\"); printf(\"\\n\"); } else { printf(\"*\"); for(j=1;j<=2*(h-i)-1;j++) printf(\" \"); printf(\"*\\n\"); } } return 0; } 19. 空心字符菱形 输入:菱型起始字母和菱形的高度。 输出:参看测试用例,打印空心的由字符组成的菱形。 实用文档. . 程序: #include int i,j,h; char ch; scanf(\"%c%d\ for (i=1;i<=h;i++) { for(j=1;j<=h-i;j++) printf(\" \"); printf(\"%c\ for(j=1;j<=2*i-3;j++) printf(\" \"); if(i==1) { printf(\"\\n\"); continue; } printf(\"%c\\n\ } for (i=h+1;i<=2*h-1;i++) { for(j=1;j<=i-h;j++) printf(\" \"); printf(\"%c\ for(j=1;j<=(2*h-1-i)*2-1;j++) printf(\" \"); if(i==2*h-1) { printf(\"\\n\"); continue; } printf(\"%c\\n\ 实用文档. . } return 0; } 20. 空心梯形 输入行数 n 和首数字字符,在屏幕上输出由数字围起的高和下底宽度均 n 的空心梯形。 要求:输出的数字是循环的,即输出数字 9 后再输出的数字是 0。 输入:行数n 和首字符 输出:空心梯形 程序: #include #include int i,j,n,f,t=0; scanf(\"%d%d\ t=f; for(j=1;j<=3*n-2;j++) { if(j==3*n-2) printf(\"%d\ else printf(\"%d \ if(j<(3*n-1)/2) { if(t==9) t=0; else t++; } else if(j==(3*n-1)/2&&n%2==0) continue; else { if(t==0) t=9; else t--; 实用文档. . } } printf(\"\\n\"); t=f; for (i=2;i<=n;i++) { for (j=1;j<=2*(i-1);j++) printf(\" \"); if(i==n) { for (j=1;j<=(n+1)/2;j++) { if(t==9) { t=0; printf(\"%d \ } else printf(\"%d \ } for (j=1;j<=n/2;j++) { if(t==0&&n%2!=0) t=9; else if(j==1&&n%2==0) { if(j==n/2) printf(\"%d\\n\ else printf(\"%d \ continue; } else t--; if(j==n/2) printf(\"%d\\n\ else printf(\"%d \ } } else { if(t==9) { 实用文档. . printf(\"0\"); for(j=1;j<=6*n-4*i-3;j++) printf(\" \"); printf(\"0\\n\"); t=0; } else { t++; printf(\"%d\ for(j=1;j<=6*n-4*i-3;j++) printf(\" \"); printf(\"%d\\n\ } } } return 0; } H1:计算通用产品代码(UPC)的校验位〔选作〕 下面是一种计算校验位的方法:首先把第一位、第三位、第五位、第七位、第九位和第十一位数字相加。然后把第二位、第四位、第六位、第八位和第十位数字相加。接着把第一次加法结果乘以3后再加上第二次加法的结果。随后,再把上述结果减去1。减法后的结果除以10取余数。最后,用9减去上一步骤中得到的余数。现在以Morton碘盐为例,第一组数字的加法是0+4+0+0+0+3=7,而第二组数字的加法是2+6+0+1+0=9。把第一组加法值乘以3后再加上第二组加法值得到的结果是30。再减去1,结果变为29。再把这个值除以10取余数为9。9在减去余数结果9,最终值为0。 输入:每次输入三行数据,第一行是UPC的第一位数字,第二行是UPC的第一组五位数字,第三行是UPC的第二组五位数字。 输出:UPC的校验位 程序: #include #include 实用文档. . int i,j,s1=0,s2=0,t; int a[11]; char b[6],c[6]; scanf(\"%d\ scanf(\"%s\ scanf(\"%s\ for (i=0,j=1;i<5;i++,j++) a[j]=b[i]-48; for (i=0,j=6;i<5;i++,j++) a[j]=c[i]-48; for (i=0;i<11;i++) { if(i%2==0) s1+=a[i]; else s2+=a[i]; } t=9-(s1*3+s2-1)%10; printf(\"%d\\n\ return 0; } H2:数制转换〔选作〕 这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如 12 和 5 ,在十进制下它们是不等的,但假设 12 使用 3 进制而 5 使用六进制或十进制时,它们的值就是相等的。因此只要选择适宜的进制, 12 和 5 就可以是相等的。 程序的输入是两个数字 M 和 N( 其十进制的值不超过 1000000000) ,它们的进制在 2~36 之间。对于十以下的数字,用 0~9 表示,而十以上的数字,那么使用大写的 A~Z 表示。 求出分别在 2~36 哪种进制下 M 和 N 相等。假设相等那么输出相应的进制,假设不等那么输出错误信息。当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。信息的格式见测试用例。 程序: #include int 实用文档. main() . { long int pm=0,pn=0,s=0,t=0,w=1,e=1,p=0,q=0; int a[30],b[30]; char m[30],n[30]; int i,j,g,k,max1=0,max2=0,flag=0; scanf(\"%s%s\ for(i=0;m[i]!='\\0';i++) { if(m[i]>='A'&&m[i]<='Z') a[i]=m[i]-55; if(m[i]>='0'&&m[i]<='9') a[i]=m[i]-48; max1=max1<(a[i]+1)?(a[i]+1):max1; max1=max1<2?2:max1; } pm=i; for(j=0;n[j]!=0;j++) { if(n[j]>='A'&&n[j]<='Z') b[j]=n[j]-55; if(n[j]>='0'&&n[j]<='9') b[j]=n[j]-48; max2=max2<(b[j]+1)?(b[j]+1):max2; max2=max2<2?2:max2; } pn=j; for(i=max1,j=max2;i<=36&&j<=36; ) { p=0; q=0; w=1; e=1; for(g=pm-1;g>=0;g--) { p+=a[g]*w; w=w*i; } for(k=pn-1;k>=0;k--) { q+=b[k]*e; e=e*j; } if(p (p>q) . } else { flag=1; printf(\"%s (base %d) = %s (base %d)\\n\ break; } } if(flag==0) printf(\"%s is not equal to %s in any base 2..36\\n\ return 0; 21. 零钱换整钱 小明手中有一堆硬币,小红手中有假设干张10元的整钱。 1 角的硬币厚度为 1.8mm,5 角的硬币厚 1.5mm, 1 元的硬币为 2.0mm 。小明和小红一起玩游戏,小红拿出假设干张10元的纸币,小明要将 1 角的硬币放成一摞,将 5 角的硬币硬币放成一摞,将 1 元的硬币放成一摞,如果 3 摞硬币一样高,并且金额能够正好小红要求的面值,那么双方可以进行交换,否那么没有方法交换。 输入:小红希望交换几张10元的纸币 输出:1 角的数量,5 角的数量,1元的数量 程序:三种硬币厚度公倍数:18mm〔1角10个共1元,5角12个共6元,1元9个共9元,要想3摞硬币一样高总钱数必须是16元〔1+6+9〕的公倍数〕 #include int n,t,x,y,z; scanf(\"%d\ t=n*10; if(t%16!=0) printf(\"No change.\\n\"); 实用文档. . else { t=t/16; x=t*10; y=t*12; z=t*9; printf(\"%d,%d,%d\\n\ } return 0; } 22. 买东西. 某商品有A、B、C三种品牌,各品牌的价格各不相同,其中A品牌的价格为每个5元, B品牌为每个3元,而C品牌为每3个1元。如果要用 M 元钱买 N 个该商品,要求每个商品至少买一个,编程求各种品牌各能买多少个。 输入: 先后输入M〔钱数〕及N〔商品个数〕的实际数值 输出: 所有可能情况下可以购置的3种商品的个数,按A、B、C品牌的顺序输出,用逗号分隔。例如:2,30,68;表示A品牌商品2个、B品牌商品30个、C品牌商品68个。 要求:因为有多个结果,结果的排序按照A品牌的个数从少到多的顺序输出。 程序: #include int i,j,k; float m,n; scanf(\"%f%f\ for(i=1;i . } { for(j=1;j<=n-1-i;j++) { for(k=1;k<=n-i-j;k++) if((i*5+j*3+k*1.0/3)==m&&i+j+k==n) printf(\"%d,%d,%d\\n\ } } return 0; 23. 谁能出线 电视台举办“超级学生〞才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数〔0~100分〕,各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,那么可同时进入下一轮。 输入: 按顺序给出一个小组10个人的最后得分〔int〕。 输出: 能够出线的学生序号〔0~9〕。 程序: #include int i,s[10]={0},max=0; for(i=0;i<10;i++) { scanf(\"%d\ if(max . } max=s[i]; } for(i=0;i<10;i++) { if(s[i]==max) printf(\"%d\\n\ } return 0; 24. 寻找特殊偶数 有一种特殊偶数,它每一位上的数字都两两不相同。我们现在需要找出四位数中某一区间内的这类偶数。 输入 所要寻找的四位偶数的范围。每组输入有两个数字:第一个数字是最小范围;第二个数字是最大范围。如果输入遇到0,输入结束。 输出 列出此范围内的所有特殊偶数,并且列出此范围内特殊偶数的个数。 程序: #include int i,j,k,a,b,c,d,m=0,e; for(e=0;e>=0;e++) {scanf(\"%d%d\ if((i==0)||(j==0)) break; else if((i>9999||i<1000)||(j>9999||j<1000)) printf(\"Error\\n\"); 实用文档. . else {for(k=i;k<=j;k++) {if (k%2==1) continue; a=k/1000;b=(k%1000)/100;c=(k%100)/10;d=k%10; if((((a==b)||(b==c))||(c==d)) ||((d==a)||((a==c)||(d==b)))) continue; printf(\"%d \ printf(\"\\ncounter=%d\\n\ } 输入N*N图形正方形的边长N,图形左上角的字母,输出由字母围成的空心正方形。输出的字母是顺时针连续的,且是循环的,即输出字母'Z'后输出字母\"A\"。注意在两个字母之间有一个空格。 程序: #include int n,i,j,t; char m; scanf(\"%d %c\ for(i=0;i for(j=0;j if((m<=90&&t>90)||(m>96&&t>122)) t=t-26; if(j==n-1) printf(\"%c\\n\ else 实用文档. . printf(\"%c \ } } else if(i==n-1) { for(j=0;j if((m<=90&&t>90)||(m>96&&t>122)) t=t-26; if(j==n-1) printf(\"%c\\n\ else printf(\"%c \ } } else { for(j=0;j<2*n-1;j++) { if(j==0) { t=m+4*n-4-i; if((m<=90&&t>90)||(m>96&&t>122)) t=t-26; printf(\"%c\ } else if(j==2*n-2) { t=m+n-1+i; if((m<=90&&t>90)||(m>96&&t>122)) t=t-26; printf(\"%c\\n\ } else printf(\" \"); } } } return 0; } 实用文档. . H3:猜数字〔选作〕 有如下一组数字,其中每个数字都在 1 ~ 63 之间, 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 2 3 6 7 10 11 14 15 18 19 22 23 26 27 30 31 34 35 38 39 42 43 46 47 50 51 54 55 58 59 62 63 4 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31 36 37 38 39 44 45 46 47 52 53 54 55 60 61 62 63 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 40 41 42 43 44 45 46 47 56 57 58 59 60 61 62 63 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 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 现在需要编写一个程序,当从键盘输入某数字在且仅在哪几行出现了,该程序可以“猜〞出这个数字是几。 输入: 程序的输入是一串以空白符分开的数字,当输入 0 时表示输入结束。 输出: 输出猜到的数字。 程序: #include int a[7],m,n=0,i,p=0; for (i=0;i<7;i++) { scanf(\"%d\ 实用文档. . n++; if (a[i]==0) { break; } scanf(\" \"); } for (m=1;m<64;m++) { p=0; for (i=0;i<(n-1);i++) { if (a[i]==1) { if (m==m/2*2) {p=1;break;} } if (a[i]==2) { if (m%4!=3&&m%4!=2) {p=1;break;} } if (a[i]==3) { if (m%8!=4&&m%8!=5&&m%8!=6&&m%8!=7) {p=1;break;} } if (a[i]==4) { if(m%16!=8&&m%16!=9&&m%16!=10&&m%16!=11&&m%16!=12&&m%16!=13&&m%16!=14&&m%1 6!=15) {p=1;break;} } if (a[i]==5) { if (m>31&&m<48||m<16) {p=1;break;} } if (a[i]==6) { if (m<32) {p=1;break;} } } 实用文档. . if (p==0) { printf(\"%d\\n\ break; } } return 0; } H4:小蜜蜂〔选作〕 一只小蜜蜂在如以下图所示的蜂窝上爬行。它爬行时,只能从一个格爬到相邻的大号格子中。例如,从 1 号格子可以爬到 2 号或者 3 号格子,从 2 号那么可以爬到 3 号或者 4 号格子。 请问从一个格子 a 爬到一个格子 b 一共有多少种可行的路线。 输入: 分别是起始点 a 和终止点 b 的编号。〔 a 和 b 在 1~100 之间,且 a程序: #include\"stdio.h\" 实用文档. #define N 50 int main() { int b[N]={0}; int c[N]={0}; int i,j,k,n,a1,a2,t,l; b[1]=c[1]=1; scanf(\"%d%d\ n=a2-a1+1; for(j=3;j<=n;j++) { for(i=1;i c[i]=b[i]-1; l=0; } else c[i]=b[i]; b[i]=t; if(b[i]>=10) { l=1; b[i+1]=b[i+1]+1; b[i]=b[i]%10; } } } k=N; while(b[--k]==0){} for(i=k;i>=1;i--) printf(\"%d\ printf(\"\\n\"); return 0; } #include long double num1,num2,num3=0; int a=0,b=0,i; scanf(\"%d . 实用文档.%d\ . } num1=1; num2=2; if(b-a==1) printf(\"1\\n\"); else if(b-a==2) printf(\"2\\n\"); else { for(i=3;i<=b-a;i++) { num3=num1+num2; num1=num2; num2=num3; } printf(\"%.0lf\\n\ } return 0; H5.铺地板〔选作〕 背景: 你是一名室内装潢工程队的配料员。你的伙伴们喜欢采用“之〞字型的方式铺大理石地砖,图案如下: 1 3 4 10 11 2 5 9 12 19 6 8 13 18 20 7 14 17 21 24 15 16 22 23 25 学了 C 语言以后,你决定编写一个程序,帮助你的同伴生成这样的图形。 输入: 方阵N的大小。 输出 方阵。 实用文档. . 程序: #include int i=0,j=0,g,n,t=1; int a[100][100]; scanf(\"%d\ for(g=0;g for(i=0,j=g;i<=g&&j>=0;i++,j--) { a[i][j]=t; t++; } } else { for(i=g,j=0;i>=0&&j<=g;i--,j++) { a[i][j]=t; t++; } } } for(g=1;g for(i=g,j=n-1;i a[i][j]=t; t++; } 实用文档. . } } else { for(i=n-1,j=g;i>=g&&j for(i=0;i printf(\"%2d\ else printf(\"%2d \ } printf(\"\\n\"); } return 0; H6 晕〔选作〕 看着这样的“回〞形图案你晕吗? 让我们不用数组,来做出它。 输入: n。正方形的边长 输出: 边长为 n 的数字回形方阵。 实用文档. . 程序: #include int a[20][20],i,j,n,m=1,l,k=0; scanf(\"%d\ l=n; for(i=1;i<=(n+1)/2;i++) { for(j=0;j for(j=1;j<=l-1;j++) {a[j+k][k]=4*l-4-j+m; a[j+k][n-1-k]=l+j+m-1; } m=m+4*l-4; l=l-2; k=k+1; } for(i=0;i<=n-1;i++) { for(j=0;j<=n-1;j++) printf(\"%3d\ printf(\"\\n\"); } } H7 子数整除〔选作〕 对于一个五位数a1a2a3a4a5,可将其拆分为三个子数: 实用文档. . sub1=a1a2a3 sub2=a2a3a4 sub3=a3a4a5 例如,五位数20217可以拆分成: sub1=202 sub2=020〔=20〕 sub3=207 现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1、sub2、sub3都可被K整除。 输出时请按照由小到大的顺序排列〔每行输出一个数〕。 程序: #include int main(void) { int i,j,k,l,m,n; scanf(\"%d\ for (i=1;i<=3;i++) for (j=0;j<=9;j++) for (k=0;k<=9;k++) for (l=0;l<=9;l++) for (m=0;m<=9;m++) { if ((i*100+j*10+k)%n==0&&(j*100+k*10+l)%n==0&&(k*100+l*10+m)%n==0) printf(\"%d%d%d%d%d\\n\ if (i==3) return 0; } return 0; } 实用文档. . H8 邮票组合〔选作〕 背景: 我们寄信都要贴邮票,在邮局有一些小面值的邮票,通过这些小面值邮票中的一张或几张的组合,可以满足不同邮件的不同的邮资。 现在,邮局有4种不同面值的邮票。在每个信封上最多能贴5张邮票,面值可相同,可不同。 输入: 四种邮票的面值。 输出: 用这四种面值组成的邮资最大的从1开始的一个连续的区间。 说明: 如结果为10,那么说明使用4张邮票可组合出1、2、3、4、5、6、7、8、9、10这些邮资。 名词解释: 邮资:就是你寄东西需要花多少钱。 邮票面额:是由国家发行的具有固定价格的花纸片,被称为邮票。 如果你寄东西,邮局称了重量,告诉你要240分。这样你就要贴邮票了。如果现在邮局的邮票有面值为80分、50分、20分和10分的四种,你就可以采用不同的组合得到240的邮资,例如:采用3张80分的可以凑出240分;或者24张10分的凑起来240分也可以。显然不同邮票的组合都可以得到同样一种邮资。 程序: #include int i,j,k,p,a1,a2,a3,a4,m=1,flag; scanf(\"%d%d%d%d\ A: for(i=0;i<=5;i++) 实用文档. . } { for(j=0;j<=5-i;j++) { for(k=0;k<=5-i-j;k++) { for(p=0;p<=5-i-j-k;p++) { flag=1; if(a1*p+a2*k+a3*j+a4*i==m) { flag=0; m++; goto A; } } } } } if(flag==1) printf(\"The max is %d.\\n\ H9 撞球(选做) 一天,丁俊晖编一整天的程序,突然觉得累了,于是便决定在房间内四处走走。他的房间是矩形的,他从电脑开始随便选了一个角度开始行走。由于职业习 惯,丁俊晖走路始终是直线,而且碰到墙以后会反弹,入射角度与出射角度完全相同。丁俊晖会一直行走,直到灵感再次迸发。假设他的行走速度是匀速的,现在, 丁俊晖的母亲想知道他一共休息了多长时间以便提醒他继续工作。 丁俊晖想考考他的母亲,于是他记录了自己碰到墙壁的序列并且告诉了她,你有没有方法能够帮助她计算出小丁所走的路程? 输入 输入包括多个测试用例,每个测试用例如下: 第一行包含两个数字 w, l(0 我们约定,左上角的坐标为0,0,所有的坐标都是浮点型数字。 实用文档. . 输出 一个浮点型数字,代表总路程,结果精确到小数点后 4 位。 程序: #include\"stdio.h\" #include\"string.h\" #include\"math.h\" void main() { char a[2000]; int w,l,x0,y0,x1,y1,i,k,r=0,f=0,n=0,m=0; double c,d,s; scanf(\"%d%d\ scanf(\"%d%d\ scanf(\"%d%d\ scanf(\"%s\ k=strlen(a); for(i=0;i . } if(a[i]=='R'||a[i]=='L') m++; if(a[i]=='F'||a[i]=='B') n++; } for(i=0;i if(a[i]=='L') r=2; if(r>0) break; } for(i=0;i if(a[i]=='B') f=2; if(f>0) break; } if(m%2==0) d=m*w+(x0-x1)*pow(-1,r); else d=m*w+w-x0-x1; if(n%2==0) c=n*l+(-y0+y1)*pow(-1,f); else c=n*l-l+y0+y1; s=sqrt(pow(d,2)+pow(c,2)); printf(\"%.4f\\n\ H10. 整数问题(选做) 请求输出满足以下条件的n位正整数的个数: 要求该n位整数的从高位开始前1位可以被1整除,该n位整数前2位可以被2*2整除,该整数前3位可以被3*3整除,该整数前4位可以被4*4整除……。即该整数前k位都可被k平方整除。 例如:n=1,那么符合条件的1位正整数为1~9,输出答案9。n=2,符合条件的正整数为:12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 实用文档. . 92, 96,那么输出答案22。当n=4时,2432就是一个符合题意的整数。第一位2可以被1整除;前2为24可以被4整除;前3位243可以被9整除;整个4位2432可以被16整除。 实用文档. . 输入: n(0<=n<9) 输出: 符合该条件的n位正整数的数量 〔此题目为软件学院2007年保研学生初试上机试题。此题可以不用数组〕 程序: #include static int a[30],b[30],n,t,temp,i,j,k; scanf(\"%d\ for(i=1;i<=n;i++) { t=1; for(j=1;j<30;j++) { for(k=0;k<=9;k++) { b[t]=a[j]*10+k; if(b[t]%(i*i)==0 && b[t]>b[t-1]) t++; } } for(j=1;j<30;j++) {a[j]=b[j];b[j]=0;} t--; } printf(\"%d\\n\ } 实用文档. . 26.二年级小学生的题目 两个二年级小朋友在一起玩游戏,小明给出一堆不超过两位的正整数和运算要求〔+、-、*、/、%〕,小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。 输入: 用逗号分隔的不超过两位的正整数序列,及其运算符和等号 输出: 最大数 op 最小数=结果 程序: #include int i,a,max=0,min=100,s; char l[100]={0},op; gets(l); for(i=0;;i=i+2) {if(l[i]=='=') break; else {if(l[i]==43||l[i]==45||l[i]==42||l[i]==37||l[i]==47) op=l[i]; else {if(l[i+2]==44) {a=(l[i]-48)*10+l[i+1]-48; i++; } else a=l[i]-48; if(a>=max) {max=a;} if(a<=min) {min=a;} 实用文档. . } }} switch(op) {case 43:s=max+min;printf(\"%d + %d = %d\\n\ case 45:s=max-min;printf(\"%d - %d = %d\\n\ case 42:s=max*min;printf(\"%d * %d = %d\\n\ case 37:{if(min==0) {printf(\"Error!\\n\");break;} else {s=max%min; printf(\"%d % %d = %d\\n\ break;} } case 47:{if(min==0) {printf(\"Error!\\n\");break;} else {s=max/min; printf(\"%d / %d = %d\\n\ break;} } } } 27.等值数列段 如果一个数列中的某一段〔至少有两个元素〕的各元素值均相同,那么称之为等值数列段。等值数列段中元素的个数叫做等值数列段的长度。 输入: 由N个元素组成的整数数列A〔其中N<=50) 输出: A中长度最大的所有等值数列段的始末位置,如果没有等值数列段,那么输出No equal number list. 说明: 始末位置是指数组下标,即0表示第一个元素。 如果有多个同等长度的等值数列,只输出第一个等值数列的起始位置。 当在一个LIST中出现两个等长的连续串的时候,我们的答案应该是第一个等长串。 实用文档. . 程序: #include char a[N],t; int i,j=0,n,b[M]={0},max=0,min=0,temp; scanf(\"%d\ k: { gets(a); if((strlen(a)+1)/2!=n) goto k; } t=a[0]; b[0]=0; for(i=2;i t=a[i]; j++; b[j]=(i+1)/2; } } j++; b[j]=(i+1)/2; temp=b[1]-b[0]; max=b[1]-1; min=b[0]; for(i=1;i<=j;i++) { if(temp实用文档. . { temp=b[i+1]-b[i]; max=b[i+1]-1; min=b[i]; } } if(temp==1) printf(\"No equal number list.\\n\"); else printf(\"The longest equal number to %d.\\n\ return 0; } list is from %d 28.大家一起做游戏 输入: 小朋友的个数〔<=50〕 要被练习的数字 输出: 最终被留下的小朋友的序号 说明: 如“要被练习的数字〞是5,那么每次数到5的同学要退出该游戏 程序: #include long int left,p,i,j,k,q,flag[100],n,m; scanf(\"%d%d\ left=n; p=1; for (i=1;i<=n;i++) flag[i]=1; for 实用文档. (i=1;i<=n;i++) . } { q=(m-1)%left+1; j=0; k=p; while (j!=q) { if (flag[k]==1) j++; if (j==q) break; k++; if (k==n+1) k=1; } flag[k]=0; p=k; left--; } printf(\"The left child is NO %d.\\n\ 29. 组成最大数 任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,那么输出为 9531 。 输入: 自然数 n 输出: 各位数字组成的最大数 程序: #include char a[10000]; int x[10]={0}; scanf(\"%s\ int n=strlen(a); for(int 实用文档. i=0;i } x[a[i]-'0']++; for(int i=9;i>=0;i--) for(int j=0;j 30. 删除重复字符 背景: 输入一个长度不超过 100 的字符串,删除串中的重复字符。 输入: 输入要检查的字符串,长度不超过100个字符。例如:abacaeedabcdcd。 输出: 删除重复字符后的字符串。例如:abced。 程序: #include char a[N],t; int i,j,k; scanf(\"%s\ for(i=0;i . } for(j=i+1;j for(k=j;k H11:五年级小学生的题目〔选做〕 那两个小朋友在不断进步,他们已经学会了负数和多位数,于是他们又开始进行游戏了。小明给出一堆整数和运算要求〔+、-、*、/、%〕,小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。 输入: 用逗号分隔的整数序列,及其运算符和等号 输出: 最大数 op 最小数=结果 说明:此题目应该可以不使用数组就可以完成,关键是如何处理负数和减法 程序: #include int intpow(int a,int b)//a^b { int result=1; for(int 实用文档. i=0;i. } result=result*a; return result; struct date { int max; int min; char op; int r; }; struct date function(char p[],int n) { struct date result; n=n-4; int max=-10000; int min=10000; int count=0;//need back to 0 int x[10]={0};//need back to 0 int temp=0;//need back to 0 int sign=1;//need back to 1 for(int i=0;i<=n;i++) { if (p[i]==',')//meet , means end caculate the value and compare with max and min { for(int k=0;k if(temp>max) max=temp; if(temp if(p[i]=='-') { sign=-1; continue; } else 实用文档. . } { x[count]=p[i]-'0'; count++; } char opp; opp=p[n+1]; if(opp=='+') {result.r=max+min;result.op='+';} else if(opp=='-') {result.r=max-min;result.op='-';} else if(opp=='*') {result.r=max*min;result.op='*';} else if(opp=='/') { if(min==0) result.r=0; else { result.r=max/min; } result.op='/'; } else if(opp=='%') {result.r=max%min;result.op='%';} result.max=max; result.min=min; return result; } int main() { char w[100]; gets(w); int l=strlen(w); struct date cc=function(w,l); if(cc.op=='/'&&cc.min==0) printf(\"Error!\"); else 实用文档. . { if(cc.max<0) printf(\"(%d)\ else printf(\"%d\ printf(\" %c \ if(cc.min<0) printf(\"(%d)\ else printf(\"%d\ printf(\" = \"); printf(\"%d\ printf(\"\\n\"); } } H12:扫雷〔选做〕 输入 输入中将包括一系列的地图,每个地图的第一行有两个整数 n 和 m〔0 针对每一个地图,首先输出一行: Field #x:其中 x 是当前地图的编号〔从 1 开始〕。下面的 n 行那么将地图中的 \".\" 以数字表示,该数字表示该方格周围有多少颗地雷。 程序: #include char 实用文档. a[N][N]; . int n,m,t,i,j,k=1; static int b[N][N]; for(n=m=1; n!=0 && m!=0; ) { for(i=0;i scanf(\"%s\ for(i=0;i b[i][j]++;b[i+1][j]++;b[i+2][j]++;b[i][j+1]++;b[i+2][j+1]++;b[i][j+2]++;b[i+1][j+2]++;b[i+2][j+2]++; } } } if(n!=0&&k>1) {printf(\"\\nField #%d:\\n\ else if(n!=0) {printf(\"Field #%d:\\n\ for(i=0;i 输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到 大排列。 实用文档. . 输入: 两个已经排好顺序〔升序〕的两个字符串 输出: 一个合并在一起的有序〔升序〕的字符串 要求: 设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。 如果采用先进行串连接,然后再进行排序的算法,那么效率太低了。 程序: #include { char a[100],b[100],c[200]; int i=0,j=0,k=0; gets(a);gets(b); while(i c[k++]=b[j++]; } } while(i while(j . c[k++]=b[j++]; } c[k]='\\0'; printf(\"%s\\n\ return 0; } 32. 串的减法 输入字符串s和t〔串长不超过80个字符〕,将在字符串s中出现,但未在字符串t中出现的字符组成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符,输出u。 例如:当s=\"112345\",t=\"2467\"时,u=\"1135\"。 输入: 第一行为串s 第二行为串t 输出: 串u 程序: #include char s[800],t[800]; static int a[500]={0}; int i,k,m,n; gets(s); gets(t); m=strlen(s); n=strlen(t); 实用文档. . for(i=0;i<=n-1;i++) { k=t[i]; a[k]=1; } for(i=0;i<=m-1;i++) { k=s[i]; if(a[k]==0) printf(\"%c\ } printf(\"\\n\"); return 0; } 输入 5 个单词,将它们按从大到小的顺序排列后输出。 输入: 5个单词 输出: 排序后的顺序 程序: #include 实用文档. . #include char a[5][25],b[5][25]; int i,j,k; for(i=0;i<5;i++) scanf(\"%s\ for(i=0;i<5;i++) { for(k=0,j=0;j<5;j++) if(strcmp(a[i],a[j])<0)k++; strcpy(b[k],a[i]); } for(i=0;i<5;i++) printf(\"%s\\n\ } 34.北理工的恶龙 背景: 最近,北理工出现了一只恶龙,它长着很多头,而且还会吐火,它将会把北理工烧成废墟, 于是,校长下令召集全校所有勇士杀死这只恶龙。要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。校长想花 最少的学分数杀死恶龙,于是找到你寻求帮助。 输入: 第一行 龙头数 n , 勇士人数 m 〔 1<=n, m<=100 〕 接下来 n 行,每行包含一个整数,表示龙头的直径 接下来 m 行,每行包含一个整数,表示勇士的身高 l 输出: 如果勇士们能完成任务,输出校长需要花的最小费用;否那么输 出 “ bit is doomed! 〞 程序 实用文档. : . #include int n,m,i,j,t,k,c,d; scanf(\"%d%d\ int a[100]={0}; int b[100]={0}; for(i=0;i t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } for(i=0;i t=b[j]; b[j]=b[j+1]; b[j+1]=t; } } } k=0; for(i=0;i a[i]=0; k++; break; } else 实用文档. . { b[j]=0; k++; } } if (k>m) break; } for(i=k;i printf(\"bit is doomed!\\n\"); } ——要用递归啊! 背景: 哈哈!我们终于学了递归了,现在大家一定感到非常有意思吧,那个典型的“汉诺塔〞问题,一个非常短的程序居然可以完成如此复杂的工作,真是神奇啊!来吧,让我们也动手编写一个递归程序,当然,我们要编写的不可能太复杂。 功能: 求整数 n 到 m 区间的累加和,其中n<=m。 输入: 区间的起始点n 区间的终止点m 输出: 累加和 要求: 使用递归算法完成。如此简单的题目当然要有隐含的测试用例啦,就3个,看看谁能猜出来。 实用文档. . 程序: #include int sum( int n, int m ); int n, m; scanf( \"%d %d\ printf( \"The sum from %d to %d is %d.\\n\ } int sum( int n, int m ) { int s; if ( m==n ) s=n; else s=m+sum( n, m-1 ); return ( s ); } H13:平安的密码〔选做〕 随着电子设备的广泛运用,密码也渐渐融入每个人的生活。保护好密码,不仅关系到个人隐私,更关系到个人的财产和平安。一个平安的密码,最好由大小写字母、数字或符号组成。包含越多种类的字符,其平安性就越高。同时密码还需要有一定的长度,通常至少要由六个以上的字符组成。 并不是每个人都喜欢这样复杂的密码,很多人在设置密码的时候,喜欢使用自己的名字或者生日,但这是很大的平安隐患。 任务 林晓炜正在设计一个网络交易系统,为了保证用户的密码平安,他需要一个程序,判断用户自己设置的密码是否平安,如果不平安,那么给出提示。现在他向你求助,请你帮助设计一个程序来解决这个问题。 应当按照以下的规那么来判断密码是否平安: 实用文档. . 如果密码长度小于 6 位,那么不平安 如果组成密码的字符只有一类,那么不平安 如果组成密码的字符有两类,那么为中度平安 如果组成密码的字符有三类或以上,那么为平安 通常,可以认为数字、大写字母、小写字母和其它符号为四类不同的字符。 输入 输入的第一行是一个整数 N,说明后面有多少组密码。随后的 N 行输入包括 N 个密码,每个密码的长度均小于 20 个字符。 输出 针对每一个密码判断并输出它是否平安。对于不平安的密码输出 \"Not Safe\",对于中度平安的密码输出 \"Medium Safe\",对于平安的密码输出 \"Safe\" 输入样例 4 1234 Abcdef ABC123 1#c3Gh 输出样例 Not Safe Not Safe Medium Safe Safe 程序: #include int main(void) { int n,i,j,x,m,b[4]; char a[100]; scanf(\"%d\ for (i=1;i<=n;i++) { gets(a); if (i==1) gets(a); x=strlen(a); if (x<6) {printf(\"Not Safe\\n\");continue;} b[0]=0;b[1]=0;b[2]=0;b[3]=0; 实用文档. . for (j=0;j<=x-1;j++) { if (48<=a[j]&&a[j]<=57) b[0]=1; else if (65<=a[j]&&a[j]<=91) b[1]=1; else if (97<=a[j]&&a[j]<=123) b[2]=1; else b[3]=1; if (a[0]+a[1]+a[2]+a[3]==4) break; } m=b[0]+b[1]+b[2]+b[3]; switch (m) { case 1:printf(\"Not Safe\\n\");break; case 2:printf(\"Medium Safe\\n\");break; case 3:printf(\"Safe\\n\");break; case 4:printf(\"Safe\\n\"); } } return 0; } H14:身份证的奥秘〔选做〕 输入 输入n组身份证号码,第一行为个数,以后每行为身份证号码。 输出 如果输入的身份证号码为15位,那么将其升级为18位后显示输出;否那么判断其是否为合法身份证号,并逐行输出。 程序: #include 实用文档. . char ans(char x[20]) { int i,y; int d[20]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,0,0,0}; char e[11]={'1','0','X','9','8','7','6','5','4','3','2'}; y=0; for (i=0;i<=16;i++) {y=y+(x[i]-48)*d[i];y=y%11;} y=y%11; return e[y]; } int main(void) { int i,n,m,j; char a[1000],b[20]; scanf(\"%d\ for (i=1;i<=m;i++) { scanf(\"%s\ n=strlen(a); if ((n!=15)&&(n!=18)) {printf(\"Invalid\\n\");continue;} if (n==15) { for (j=0;j<=5;j++) b[j]=a[j]; if (a[12]=='9'&&a[13]=='9'&&(a[14]=='6'||a[14]=='7'||a[14]=='8'||a[14]=='9')) {b[6]='1';b[7]='8';} else {b[6]='1';b[7]='9';} for (j=8;j<=16;j++) b[j]=a[j-2]; b[17]=ans(b); b[18]='\\0'; printf(\"%s\\n\ } else if (a[17]==ans(a)) printf(\"Valid\\n\"); else printf(\"Invalid\\n\"); } return 0; } ××10-5 〔科学记树法表示:9.18E-5〕这种类型的数据。 实用文档. . 输入: 用科学记数法表示的数据。即为符合C语言表示的科学记数法表示。 输出: 该数据的双精度表示 说明: 输入数据的精度不高于小数点后50位。 输入数据时,在实数和幂之间有空格进行分隔,空格个数不定。 结果保存到小数点后8位,如缺乏8位用0补足,超过8位那么截断,不进行四舍五入的处理。 程序: #include char a[N],b[N]; int i,j,s,q,x; gets(a); x=strlen(a); for( s=0,q=1,x-- ; '0'<=a[x] && a[x]<='9' ; x--, q*=10 ) s=s+(a[x]-'0')*q; if( a[x]=='-' ) s=-s; for( i=j=0; a[i]!=' '; i++ ) { if( a[i]<='9' && a[i]>='0' ) { b[j]=a[i]; j++; } } if(s<=0) 实用文档. . } { for( i=s; i<=s+8; i++) { if(i<0) printf(\"0\"); if(i>=0&&i printf(\"\\n\"); } if(s>0) { for( i=0; i<=s+8; i++ ) { if(i printf(\"\\n\"); } 37.大数分解 从键盘输入的一个大于 1 的整数,通过算法将该整数分解为假设干因子的乘积。 输入: 一个正整数。 输出: 分解后的各个因子。 实用文档. . 程序: #include int i=0; for(i=2;i<=sqrt(shu);i++) if(shu%i==0) return (1); else continue; return (0); } int main() { int shu,i=0; int a[16]={2,3,5,7,11,13,17,19,23,29,31,34,37,41,43,47}; scanf(\"%d\ loop: if(su(shu)==0) { printf(\"%d\\n\ return 0; } else { for(i=0;i<16;) { if(shu%a[i]==0) { printf(\"%d\\n\ shu/=a[i]; goto loop; } else if(shu%a[i]!=0) { i++; continue; } else if(shu==1) break; } } return 0; } 实用文档. . ——递归 有一种特殊形式的字符串,其正反序相同,被称为“回文字符串〞。例如LeveL就是一个回文字符串。 输入: 字符串 输出: Yes或者No 说明: 如输出Yes,说明输入的字符串是一个回文字符串 输出No,说明输入的字符串不是一个回文字符串 请使用递归算法实现。 程序: #include int HUI(char str[],int min,int max) { if(min>max) return 1; if(str[min]!=str[max]) return 0; return HUI(str,min+1,max-1); } void main() { int flog,max; gets(str); max=strlen(str)-1; 实用文档. . flog=HUI(str,0,max); if(flog==1) printf(\"Yes\\n\"); else printf(\"No\\n\"); } ——递归 输入: n和m 输出: n和m的最大公约数 程序: #include int s,t; s=m%n; if(s==0) t=n; else t=GCD(n,s); return t; } int main() { int m,n; scanf(\"%d%d\ printf(\"%d\\n\ return 实用文档. 0; . } ——递归 请使用递归算法求以下序列的前n项之和。 1 + 1/2 - 1/3 + 1/4 -1/5 ...... 输入: n 输出: 序列的前n项和〔精确到小数点之后第6位〕 程序: #include float s1; if(n==1) return 1.0; if(n%2==0) s1=sum(n-1)+1.0/n; else s1=sum(n-1)-1.0/n; return s1; } int main() { 实用文档. . int n; float s=0; scanf(\"%d\ s=sum(n); if(n==1) printf(\"1\\n\"); else printf(\"%.6f\\n\ } H15:编码问题〔选作〕 设有一个整形数组 A[0..N-1];存放的元素为 0~N-1 (1 假设给出数组A,那么可求出其编码。同理,假设给出数组A的编码,可求出A中的原数据。 输入: 推导方向〔取值为1或2,如为1,那么表示根据数组求数组编码;如为2,那么表示根据编码反求数组〕 数组个数 数组或数组编码元素 输出: 数组编码、或数组本身〔元素之间以空格分隔〕 程序:j++;
实用文档.