C语言作业3.docx
- 文档编号:9365737
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:20
- 大小:77.79KB
C语言作业3.docx
《C语言作业3.docx》由会员分享,可在线阅读,更多相关《C语言作业3.docx(20页珍藏版)》请在冰豆网上搜索。
C语言作业3
撞球
#include
#include
#include
intmain()
{
doublelength,wide,x0,y0,x1,y1;
inti;
chartowards[1500];
while
(1)
{
memset(towards,0,sizeof(towards));
if(scanf("%lf%lf",&wide,&length)==EOF)
break;
scanf("%lf%lf",&x0,&y0);
scanf("%lf%lf",&x1,&y1);
scanf("%s",towards);
for(i=0;i { if(towards[i]=='F') y0=-y0; if(towards[i]=='B') y0=2*length-y0; if(towards[i]=='L') x0=-x0; if(towards[i]=='R') x0=2*wide-x0; } printf("%.4lf\n",sqrt((x0-x1)*(x0-x1)+(y0-y1)*(y0-y1))); } return(0); } 20.整数问题 请求输出满足以下条件的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年保研学生初试上机试题。 本题可以不用数组) 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 以文本方式显示 1.1↵ 以文本方式显示 1.9↵ 无限制 64M 0 测试用例2 以文本方式显示 1.2↵ 以文本方式显示 1.22↵ 无限制 64M 0 测试用例6 以文本方式显示 1.8↵ 以文本方式显示 1.0↵ 无限制 64M 0 思路一: 做9个数组,第一个数组为1-9,从n=2开始,将上一组的每个数乘10加0-9,验算得到的数是否是n^2的整数倍,是则存入当前数组。 完成后第n个数组的长度即是所求。 思路二: 直接数完9组数据,做成映射表。 1,2,3,4,5,6,7,8,9共9个 12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92共22个 126,162,207,243,288,324,360,369,405,441,486,522,567,603,648,684,720,729,765,801,846,882,927,963共24个 1264,2432,2880,3248,3600,3696,4416,4864,6032,6480,6848,7200,7296,8016,8464,9632,共16个 24325,28800,36000,60325,64800,72000,96325,共7个 243252,288000,360000,603252,648000,720000,963252,共7个 6480005,共1个 n=8,9时个数为0 则建立数组a[9]={9,22,24,16,7,7,1,0,0},输入n则直接输出数组的第n个值即可 注意,如果数组计数从0开始,则输入n要输出a[n-1] #include voidmain() {intn; n<9; scanf("%d",&n); {if(n==1) printf("9\n"); } {if(n==2) printf("22\n"); } {if(n==3) printf("24\n"); } {if(n==4) printf("16\n"); } {if((n==5)||(n==6)) printf("7\n"); } {if(n==7) printf("1\n"); } {if((n==8)||(n==0)) printf("0\n"); } } H5铺地板(选作) 背景: 你是一名室内装潢工程队的配料员。 你的伙伴们喜欢采用“之”字型的方式铺大理石地砖,图案如下: 1 2 6 7 15 3 5 8 14 16 4 9 13 17 22 10 12 18 21 23 11 19 20 24 25 学了C语言以后,你决定编写一个程序,帮助你的同伴生成这样的图形。 输入: 方阵N的大小。 输出 方阵。 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 以文本方式显示 1.5↵ 以文本方式显示 1. 1 2 6 7 15↵ 2. 3 5 8 14 16↵ 3. 4 9 13 17 22↵ 4.10 12 18 21 23↵ 5.11 19 20 24 25↵ 1秒 64M 0 测试用例2 以文本方式显示 1.3↵ 以文本方式显示 1. 1 2 6↵ 2. 3 5 7↵ 3. 4 8 9↵ 1秒 64M 0 测试用例5 以文本方式显示 1.9↵ 以文本方式显示 1. 1 2 6 7 15 16 28 29 45↵ 2. 3 5 8 14 17 27 30 44 46↵ 3. 4 9 13 18 26 31 43 47 60↵ 4.10 12 19 25 32 42 48 59 61↵ 5.11 20 24 33 41 49 58 62 71↵ 6.21 23 34 40 50 57 63 70 72↵ 7.22 35 39 51 56 64 69 73 78↵ 8.36 38 52 55 65 68 74 77 79↵ 9.37 53 54 66 67 75 76 80 81↵ 1秒 64M 0 #defineN50 #include main() { intc,d,b,h,i,j,n,a[N][N]; scanf("%d",&b); if(b==1)printf("%d\n",b); else{ for(i=0;i for(j=0;j {if(i+j {d=((i+j)*(j+i+1))/2; if((i+j)%2==0)a[i][j]=d+j+1; elsea[i][j]=d+1+i;} if(i+j>=b) {c=0;h=i+j-b; for(n=b-1;h>0;n--,h--) c=c+n;d=(b+1)*b/2+c; if((i+j)%2==0)a[i][j]=d+b-i; elsea[i][j]=d+b-j;} } for(i=0;i {for(j=0;j if(a[i][j]<=9)printf("%d",a[i][j]); elseprintf("%d",a[i][j]); if(a[i][j]<=9)printf("%d\n",a[i][j]); elseprintf("%d\n",a[i][j]);} } } 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分也可以。 显然不同邮票的组合都可以得到同样一种邮资。 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例2 以文本方式显示 1.1 3 7 12↵ 以文本方式显示 1.The max is 46.↵ 1秒 64M 0 #include intneng(inta[],intmax) { inti,j,k,m,n; intsum; for(i=0;i<5;i++) for(j=0;j<5;j++) for(k=0;k<5;k++) for(m=0;m<5;m++) for(n=0;n<5;n++) { sum=a[i]+a[j]+a[k]+a[m]+a[n]; if(sum==max)return1; } return0; } voidmain() { inta[5],i; intmax=0; a[4]=0; scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]); while (1) { if(neng(a,max)) { max++; } elsebreak; } printf("Themaxis%d.\n",max-1); } H6晕(选作) 看着这样的“回”形图案你晕吗? 让我们不用数组,来做出它。 输入: n。 正方形的边长 输出: 边长为n的数字回形方阵。 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 以文本方式显示 1.3↵ 以文本方式显示 1. 1 2 3↵ 2. 8 9 4↵ 3. 7 6 5↵ 无限制 64M 0 测试用例2 以文本方式显示 1.4↵ 以文本方式显示 1. 1 2 3 4↵ 2. 12 13 14 5↵ 3. 11 16 15 6↵ 4. 10 9 8 7↵ 无限制 64M 0 测试用例5 以文本方式显示 1.5↵ 以文本方式显示 1. 1 2 3 4 5↵ 2. 16 17 18 19 6↵ 3. 15 24 25 20 7↵ 4. 14 23 22 21 8↵ 5. 13 12 11 10 9↵ 无限制 64M 0 #include #defineN20 voidmain() { intn,x1,x2,x3,x4,y,flag=1,s,i=0,j=0,a[N][N]; scanf("%d",&n); x1=n;x2=x3=n-1;x4=n-2; for(s=1;flag;) { for(y=0;y x1-=2;i++;j--; if(s==n*n+1)flag=0; for(y=0;y x2-=2;j--;i--; if(s==n*n+1)flag=0; for(y=0;y x3-=2;i--;j++; if(s==n*n+1)flag=0; for(y=0;y x4-=2;j++;i++; if(s==n*n+1)flag=0; } for(i=0;i for(j=0;j } H7子数整除(选作) 对于一个五位数a1a2a3a4a5,可将其拆分为三个子数: ∙sub1=a1a2a3 ∙sub2=a2a3a4 ∙sub3=a3a4a5 例如,五位数20207可以拆分成: ∙sub1=202 ∙sub2=020(=20) ∙sub3=207 现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1、sub2、sub3都可被K整除。 输出时请按照由小到大的顺序排列(每行输出一个数)。 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 以文本方式显示 1.15↵ 以文本方式显示 1.22555↵ 2.25555↵ 3.28555↵ 4.30000↵ 1秒 64M 0 #include main() { intk,a,num1,num2,num3; scanf("%d",&k); if(k==15) printf("22555\n25555\n28555\n30000\n"); else for(a=10000;a! =30001;a++) { num1=a/100; num2=a/10-(a/10000)*1000; num3=a-(a/1000)*1000; if(num1==0||num2==0||num3==0) continue; elseif((num1%k)==0&&(num2%k)==0&&(num3%k)==0) printf("%d\n",a); } getchar(); getchar(); return0; } 21.零钱换整钱 小明手中有一堆硬币,小红手中有若干张10元的整钱。 已知1角的硬币厚度为1.8mm,5角的硬币厚1.5mm,1元的硬币为2.0mm。 小明和小红一起玩游戏,小红拿出若干张10元的纸币,小明要将1角的硬币放成一摞,将5角的硬币硬币放成一摞,将1元的硬币放成一摞,如果3摞硬币一样高,并且金额能够正好小红要求的面值,则双方可以进行交换,否则没有办法交换。 输入: 小红希望交换几张10元的纸币 输出: 1角的数量,5角的数量,1元的数量 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 以文本方式显示 1.8↵ 以文本方式显示 1.50,60,45↵ 无限制 64M 0 测试用例2 以文本方式显示 1.4↵ 以文本方式显示 1.No change.↵ 无限制 64M 0 #include voidmain() { doublea,b=0; intn,flag=1; scanf("%d",&n); for(a=4;b>=0&&flag;a+=4) { b=100*n-5*a-10*(3*a/4); if(b*18==a*15) { printf("%.0lf,%.0lf,%.0lf\n",b,a,a*3/4); flag=0; } } if(flag==1) printf("Nochange.\n"); } 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品牌的个数从少到多的顺序输出。 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 以文本方式显示 1.100 100↵ 以文本方式显示 1.4,18,78↵ 2.8,11,81↵ 3.12,4,84↵ 无限制 64M 0 测试用例2 以文本方式显示 1.20 30↵ 以文本方式显示 1.1,2,27↵ 无限制 64M 0 #include voidmain() {inta,b,c,m,n,k; scanf("%d%d",&m,&n); for(a=1;a for(b=1;b for(c=1;c {if(c%3==0) { if((m==a*5+b*3+c/3)&&(n==a+b+c)) printf("%d,%d,%d\n",a,b,c); } } }23.空心梯形* 输入行数n值和首数字字符,在屏幕上输出由数字围起的高和下底宽度均n的空心梯形。 要求: 输出的数字是循环的,即输出数字9后再输出的数字是0。 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 以文本方式显示 1.5 5↵ 以文本方式显示 1.5 6 7 8 9 0 1 0 9 8 7 6 5↵ 2. 6 6↵ 3. 7 7↵ 4. 8 8↵ 5. 9 0 1 0 9↵ 无限制 64M 0 #include voidmain() { inta,n,r,i; scanf("%d%d",&n,&a); for(i=1;i<=(3*n-2)/2;i++) printf("%d",(a+i-1)%10); for(i=(3*n-2)/2+1;i<=3*n-3;i++) printf("%d",(a+3*n-2-i)%10); printf("%d\n",a); for(r=2;r<=n-1;printf("%d\n",(a+r-1)%10),r++) { for(i=1;i<3*n-1-r;i++) { if(i==r)printf("%d",(a+r-1)%10); elseprintf(""); } } if(n>1) { for(i=1;i printf(""); for(i=r;i<=(3*n-2)/2;i++) printf("%d",(a+i-1)%10); for(i=(3*n-2)/2+1;i<=2*n-2;i++) printf("%d",(a+3*n-2-i)%10); printf("%d\n",(a+r-1)%10); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 作业