C语言middle.docx
- 文档编号:10081093
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:28
- 大小:20.69KB
C语言middle.docx
《C语言middle.docx》由会员分享,可在线阅读,更多相关《C语言middle.docx(28页珍藏版)》请在冰豆网上搜索。
C语言middle
Problem1三角形的个数
方法1:
#include<>
intisTriangle(inta,intb,intc).,array[3]存放千位
toArray(n,array);
if(array[3]+array[1]==array[2]*array[0])
return1;
else
return0;
}
intsqrtTest(intn)定义一个按规则构造好的10*10的数组s,定义一个10*10的数组t;
2.读入n,将数组t用0值初始化,将数组s中符合规则的数复制到数组t中,数组t中非0元素需要输出,0元素无需输出;
3.确定数组t中输出的开始行、结束行、开始列、结束列;
4.输出非0元素。
*/
#include<>
#include<>
voidoutput2(int*p).+n-1+n+n-1+n-2+...+1
*/
#include<>
intmain()
{
intlevel,i;
while(scanf("%d",&level)==1)
{
for(i=1;i { printf("%d+",i); } printf("%d",level); for(i=level-1;i>=1;i--) { printf("+%d",i); } printf("\n"); } return0; } Problem19三艘船 #include<> constintMAX_DAY=100; intmain(){ intspeed[3]; inthour[3]; intdis[3]; charfound; inti,j,k; while(scanf("%d%d%d",hour+0,hour+1,hour+2)==3) { scanf("%d%d%d",speed+0,speed+1,speed+2); found=0; for(i=0;i found;i++) { dis[0]=(i*24+hour[0])*speed[0]; for(j=0;j found;j++) { dis[1]=(j*24+hour[1])*speed[1]; if(dis[0]==dis[1])lf\n",p[n]); } return0; } Problem26菱形输出 /*两个字母间的空格用变量space控制,space初始值为1, i: 2-n时,space=space+2 i: n+1-2n-2时,space=space-2 */ #include<> voidoutput(inti,intn,char*a) { intj; for(j=i;j>1;j--) printf(""); printf("%c",*a); (*a)--; for(j=0;j<2*(n-i)-1;j++) printf(""); printf("%c\n",*a); (*a)--; } intmain() { intn,i,j; intr=0; chara; while(scanf("%d",&n)==1) { if(r! =0)printf("\n"); r++; a='Z'; nv++nc++nv--nc--uit);uit) { case'S': poker[i][j].v=4;break; case'H': poker[i][j].v=3;break; case'D': poker[i][j].v=2;break; case'C': poker[i][j].v=1;break; } scanf("%c",&t);alue=t-'0'; else { switch(t) { case'A': poker[i][j].value=14;break; case'K': poker[i][j].value=13;break; case'Q': poker[i][j].value=12;break; case'J': poker[i][j].value=11;break; case'T': poker[i][j].value=10;break; } } } } qsort(poker[0],13,sizeof(structcard),cmp);uit); if(poker[i][j].value>=10) switch(poker[i][j].value) { case14: printf("A");break; case13: printf("K");break; case12: printf("Q");break; case11: printf("J");break; case10: printf("T");break; } else printf("%d",poker[i][j].value); } printf("\n"); } } return0; } Problem32乒乓球 #include<> #include<> voidsolve(char*str,intbase); intmain() { charstr[100],ts[31]; intlen; inti; intw,l; while(gets(ts)! =NULL) { strcpy(str,ts); len=strlen(ts); while(ts[len-1]! ='E') { gets(ts); strcat(str,ts); len=strlen(ts); }otorcycleType); } voidinput() { inti; for(i=0;i motor[i].f=0; } } intFindMotor(char*motorName)otorcycleType,motorName)==0) returni; return-1; } voidslv() { inti,j; intfound=0; for(i=0;i { j=FindMotor(motorList[i]); if(j! =-1) { motor[j].f=1; found=1; } } if(! found) printf("Cannotfound! \n"); else { for(i=0;i if(motor[i].f) printf("%s%s%s\n",motor[i].motorcycleType,motor[i].color,motor[i].motorType); } } intmain() { while(scanf("%d%d",&n,&m)==2) { input(); qsort(motor,m,sizeof(structMotor),cmp);因为要求最先出列的k个人都是绑匪,如果m<=k,则第1个出列的就是人质,所以m>=k+1。 所以m(外循环变量i)可以k+1、k+2…进行枚举。 4.针对每个m,参与游戏的人数(内循环变量i)依次为2k、2k-1…k+1。 i个人报数时,该出列的人的编号计算公式为s=(s+m)%i,如果s>k(第k到第i-1个绑匪)或s=0(第i个绑匪),则表示出列的是绑匪,否则是人质。 5.内循环时,如果出列的是人质,则表示当前的m不合适,这时离开内循环,开始下一轮外循环;如果出列的是绑匪,则进行下一轮内循环。 如果内循环正常结束,则表示出列的k个人都是绑匪,结束外循环,输出找到的m即可。 */ #include<> intmain(){ intk,m; intfind,s,i; while(scanf("%d",&k)==1) { m=k; do { m++; find=1;.、2位数、1位数 { sum=0; for(cnt=0;cnt { sum=sum*10+str[j+cnt]-'0'; } if(isprime(sum)&&sum>max) { max=sum; } } len--; } printf("%d\n",max); } } Problem46日期比较 #include<> intd1,m1,y1; intd2,m2,y2; voidprinta() { printf("%02d%02d%disearlierthan%02d%02d%d\n",d1,m1,y1,d2,m2,y2); } voidprintb() { printf("%02d%02d%disearlierthan%02d%02d%d\n",d2,m2,y2,d1,m1,y1); } intmain() { while(scanf("%d%d%d%d%d%d",&d1,&m1,&y1,&d2,&m2,&y2)! =EOF) { if(y1 elseif(y2 elseif(m1 elseif(m2 elseif(d1 elseprintb(); } return0; } Problem47魔方阵 #include<> intmain(){ intn,i,j; intr=0; inta[19][19]; intcolumn,line,num; intnextColumn,nextLine; while(scanf("%d",&n)! =EOF) { if(r! =0)printf("\n"); r++; memset(a,0,sizeof(a)); column=n/2;//规则1 line=0; for(num=1;num<=n*n;num++)//构造魔方阵 { a[line][column]=num; nextLine=line-1;//规则2 nextColumn=column+1; if(nextLine<0)nextLine=n-1;//规则3 if(nextColumn==n)nextColumn=0;//规则4 if(a[nextLine][nextColumn]! =0||(line==0&&column==n-1))//规则5 { line=line+1; if(line>=n)line=0; } else { line=nextLine; column=nextColumn; } } for(i=0;i { printf("%d",a[i][0]); for(j=1;j printf("%d",a[i][j]); } printf("\n"); } } return0; } Problem48最长的单词 #include<> #include<> intmain(){ chartemp[1000],rs[1000]; while(gets(temp)! =NULL) { intmaxLen=0,len; char*p=strtok(temp,"\n");//在temp中,以空格和换行符为分割符寻找单词 while(p) { len=strlen(p); if(len>maxLen) { maxLen=len; strcpy(rs,p); } p=strtok(NULL,"\n");//第2次开始后的调用 } printf("%d%s\n",maxLen,rs); } return0; } Problem49奖学金 #include<> #include<> intmain(){ intfinalScore,appraiseScore,thesis; charcadre,west,name[21],max_name[21]; intn; intr=0; while(scanf("%d",&n)! =EOF) { intsum=0,max=-1,i; if(r! =0)printf("\n"); r++; for(i=0;i { inttemp=0;//某个学生的奖学金 scanf("%s%d%d%*c%c%*c%c%d",name,&finalScore,&appraiseScore,&cadre,&west,&thesis);//ok //scanf("%s%d%d%1s%*c%c%d",name,&finalScore,&appraiseScore,&cadre,&west,&thesis);//ok //scanf("%s%d%d%*c%c%1s%d",name,&finalScore,&appraiseScore,&cadre,&west,&thesis);//NO //scanf("%s%d%d%1s%1s%d",name,&finalScore,&appraiseScore,&cadre,&west,&thesis);//NO if(finalScore>80&&thesis>0)//院士奖学金 { temp+=8000; } if(finalScore>85&&appraiseScore>80)//五四奖学金 { temp+=4000; } if(finalScore>90)//成绩优秀奖 { temp+=2000; } if(finalScore>85&&'Y'==west)//西部奖学金 { temp+=1000; } if(appraiseScore>80&&'Y'==cadre)//班级贡献奖 { temp+=850; } if(temp>max){ max=temp; strcpy(max_name,name); } sum+=temp; } printf("%s\n%d\n%d\n",max_name,max,sum); } return0; } Problem50序列 /*放球方法: 后1个盒子中比前1个盒子多放1个球; 最后剩余的remain个球依次从最后1个盒子开始往前,每个盒子增加1个,直到放完为止。 该方法能保证小球装入盒子的规则 */ #include<> intmain() { intballCnt; intbox[140];//10000-(1+n)*n/2<=n,n的大小为140 inti; intremain;//还未放入盒子中的球数 intlastBox;//最后一个盒子中放的球数 intboxCnt;//放有球的盒子总数 while(scanf("%d",&ballCnt)! =EOF&&ballCnt) { remain=ballCnt; lastBox=0; for(i=0;remain>lastBox;i++) { box[i]=i+1; remain-=i+1; lastBox=box[i]; } boxCnt=i; while(remain>0) { i--; box[i]++; remain--; } for(i=0;i { printf("%d,",box[i]); } printf("%d\n",box[i]); } return0; } Problem51树 #include<> #include<> intmain(){ intL,M; charroad[10001];//1: 代表有树;0: 代表树已移走 intcnt,i,j; intleft,right; while(scanf("%d%d",&L,&M)! =EOF){ memset(road,1,L+1);//road数组的前L+1个字节置初始值1 cnt=L+1;//初始树的棵数 for(i=0;i { scanf("%d%d",&left,&right); for(j=left;j<=right;j++) { if(road[j]){ cnt--; road[j]=0; } } } printf("%d\n",cnt); } return0; } Problem52三角形 #include<> intmain(){ ints,n; intr=0,i,j; while(scanf("%d%d",&s,&n)==2) { if(r! =0) printf("\n"); r++; for(i=1;i<=n;i++)//控制输出的行数 { for(j=1;j<=i;j++)//控制每行输出的数字个数 { printf("%d",s); if(j { printf(""); } else { printf("\n"); } s=s%9+1;//计算下一次输出的数字 } } } return0; } Problem53回文数2 /*middle53: 给你一个整数(十进制), 判断该整数的十进制数和它的二进制数是否全为回文数。 */ #include<> #include<> intisPalindrome(char*number); intmain() { intn; chardecimal[4];//(0,1000),十进制不超过3位 charbinary[11];//(0,1000),二进制不超过10位 while(scanf("%d",&n)==1) { itoa(n,binary,2);//将n转换成2进制的数字字符串,存放到binary中 itoa(n,decimal,10);//将n转换成10进制的数字字符串,存放到decimal中 if(isPalindrome(decimal)&&isPalindrome(binary)) printf("Yes\n"); else printf("No\n"); } return0; } intisPalindrome(char*number)//判断number所指向的数是否是回文数 { char*head=number; char*tail=head+strlen(number)-1; while(head { if(*head! =*tail) return0; head++; tail--; } return1; } Problem54加法器 //与easy45题类似,且更简单 #include<> #include<> #include<> intmain() { char*p;//存放分离出来的数字字符串 chartemp[1001]; intsum,tint; while(gets(temp)! =NULL) { sum=0; p=strtok(temp,"+");//第1次分离 while(p) { tint=atoi(p);//数字字符串转换成整数 sum+=tint; p=strtok(NULL,"+");//第2次开始分离 } printf("%d\n",sum); } return0; } Problem55数列1 #include<> intarr[50]; intmain() { intn; inti,j,cnt,sum; while(scanf("%d",&n)==1) { cnt=0; for(i=0;i scanf("%d",arr+i); for(i=0;i { sum=0; for(j=i;j { sum+=arr[j]; if(sum%11==0) cnt++; } } printf("%d\n",cnt); } return0; } Problem56数列2 #include<> intarr[15]; intmain() { intn,i,j,cnt,tmp,res; while(scanf("%d",&n)==1) { cnt=0; for(i=0;i scanf("%d",arr+i); for(i=1;i<=((1<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 middle