算法竞赛入门经典 第3章 习题答案
2013-08-06 16:31
197 查看
习题3-1 分数统计
输入一些学生的分数,哪个分数出现的次数最多?如果有多个并列,从小到大输出。
任务1:分数均为不超过100的非负整数
任务2:分数均为不超过100的非负实数,但最多保留两位小数
习题3-2 单词的长度
输入若干个单词,输出它们的平均长度。单词只包含大写字母和小写字母,用一个或多个空格隔开
习题3-3 乘积的末3位
输入若干个整数(可以是正数、负数或者零),输出它们的乘积的末三位。这些整数中会混入一些由大写字母组成的字符串,你的程序应当忽略它们。提示:试试看,在执行scanf(“%d”)时输入一个字符串会怎样?
习题3-4 计算器
编写程序,读入一行恰好包含一个加号、减号或乘号的表达式,输出它的值。这个运算符保证是二元运算符,且两个数均为不超过100的非负整数。运算数和运算符可以紧挨着,也可以用一个或多个空格、TAB隔开。行首末尾均可以有空格。提示:选择合适的输入方法可以将问题简化。
样例输入:1+1
样例输出:2
样例输入:2- 5
样例输出:-3
样例输入:0 *1982
样例输出:0
习题3-5 选择
输入一个n*n的字符矩阵,把它左转90度后输出。
习题3-6 进制转换1
输入基数b(2<=b<=10)和正整数n(十进制),输出n的b进制表示。
习题3-7 进制转换2
输入基数b(2<=b<=10)和正整数n(b进制),输出n的十进制表示。
习题3-8 手机键盘
输入一个由小写字母组成的英文单词,输出用手机的默认英文输入法的敲键序列。例如要打出pig这个单词,需要按1次p,3次i,(稍作停顿后)1次i,记为p1i3i1。
输入一些学生的分数,哪个分数出现的次数最多?如果有多个并列,从小到大输出。
任务1:分数均为不超过100的非负整数
任务2:分数均为不超过100的非负实数,但最多保留两位小数
#include<stdio.h> #include<string.h> #define MAXN 5000 int s[MAXN],m[MAXN][2]; int main() { double x; freopen("xt3-1.in","r",stdin) ; int i=0,j=0,temp=0,length,min,max=0,last; while(scanf("%lf",&x) == 1) { temp=x*1000; temp=temp%10; if (temp>=5) s[i++]=x*100+1; else s[i++]=x*100; printf("%d-%.2lf-%d ",i-1,x,s[i-1]); } printf("\n"); length = i-1; for(i=0;i<=length;i++) { min=s[i]; for (j=0;j<=i-1;j++) { if (min<=s[j]) { min=s[j]; s[j]=s[i]; s[i]=min; for (j=j+1;j<=i;j++) { min=s[j]; s[j]=s[i]; s[i]=min; //printf("%d %d %d\n",min,i ,j); } } } } j=0; for(i=0;i<=length;i++) { last=i-1; if ((i>0)&&(s[last]==s[i])) { m[j][1]++; if (max<m[j][1]) max=m[j][1]; //printf("+ s[%d]=%d max=%d m[%d][1]=%d m[%d][0]=%d \n",i,s[i],max,j,m[j][1],j,m[j][0]); } else { if (i!=0) j++; m[j][0]=s[i]; m[j][1]=1; // printf("n s[%d]=%d max=%d m[%d][1]=%d m[%d][0]=%d \n",i,s[i],max,j,m[j][1],j,m[j][0]); } } //for (i=0;i<=max;i++) printf("m[%d][0]=%d m[%d][1]=%d\n",i,m[i][0],i,m[i][1]); for(i=0;i<=length;i++) { //if (m[i][1]==max) printf("m[%d][0]=%d m[%d][1]=%d max=%d\n",i,m[i][0],i,m[i][1],max) ; if (m[i][1]==max) printf("%.2lf\n",m[i][0]/100.0) ; } return 0; }
习题3-2 单词的长度
输入若干个单词,输出它们的平均长度。单词只包含大写字母和小写字母,用一个或多个空格隔开
#include<stdio.h> #include<string.h> #define MAXN 5000 char a[MAXN]; int main() { freopen("xt3-2.in","r",stdin); int i,j,k,n=0,len=0,sumlen=0,count=0,kongge=1,temp; double l; fgets(a,sizeof(a),stdin); for(i=0;i<=strlen(a)-1;i++) { //printf("%d\n",a[i]); if (((a[i]=='\n')||(a[i]==' ')||(a[i]==EOF))&&(kongge==0)) { sumlen+=len; //printf("%d %d\n",len,sumlen); len=0; kongge=1; } if ((a[i]!='\n')&&(a[i]!=32)&&(a[i]!=EOF)) { len++; if (kongge==1) { count++; kongge=0; } //printf("长度=%d\n",len); } } sumlen+=len; //printf("%d %d\n",sumlen,count); temp=(sumlen*100)/count%10; if (temp>=5) temp=(sumlen*100)/count+1; else temp=(sumlen*100)/count; //printf("%d\n",temp); printf("%.2lf",temp/100.0); return 0; }
习题3-3 乘积的末3位
输入若干个整数(可以是正数、负数或者零),输出它们的乘积的末三位。这些整数中会混入一些由大写字母组成的字符串,你的程序应当忽略它们。提示:试试看,在执行scanf(“%d”)时输入一个字符串会怎样?
#include<stdio.h> #include<string.h> #include<math.h> #define MAXN 5000 char a[MAXN]; int b[MAXN]; int main() { freopen("xt3-3.in","r",stdin); int i,j=0,k,chuli=0,fuhao=1,changdu,kongge=0; long plus=1; fgets(a,sizeof(a),stdin); for (i=0;i<=strlen(a);i++) { //printf("%d %d %c\n",i,a[i],a[i]); chuli=0; if (((a[i]==45)||(a[i]==32)||(a[i]==0))||((a[i]>=48)&&(a[i]<=57))) chuli=1; if (chuli==1) { if (a[i]==45) fuhao=-1; else { if((a[i]==32)||(a[i]==0)) { if (kongge==0) { kongge=1; b[j]=b[j]*fuhao; fuhao=1; j++; } } else { kongge=0; b[j]=(a[i]-48)+b[j]*10; // printf("b[%d]=%d\n",j,b[j]); } } } //if(a[i]==0) printf("EOF"); } for (i=0;i<=j-1;i++) { plus*=b[i]; //printf("b[%d]=%d plus=%d\n",i,b[i],plus); } printf("%03d",abs(plus%1000)); return 0; }
习题3-4 计算器
编写程序,读入一行恰好包含一个加号、减号或乘号的表达式,输出它的值。这个运算符保证是二元运算符,且两个数均为不超过100的非负整数。运算数和运算符可以紧挨着,也可以用一个或多个空格、TAB隔开。行首末尾均可以有空格。提示:选择合适的输入方法可以将问题简化。
样例输入:1+1
样例输出:2
样例输入:2- 5
样例输出:-3
样例输入:0 *1982
样例输出:0
#include<stdio.h> #define MAXN 5000 int main() { int a,b,c; char f; scanf("%d",&a); //printf("1 %d\n",a); scanf("%c",&f); while((f!='+')&&(f!='-')&&(f!='*')) scanf("%c",&f); //printf("2 %c\n",f); scanf("%d",&b); //printf("3 %d\n",b); if (f=='+') c=a+b; else if(f=='-') c=a-b; else c=a*b; printf("%d",c); return 0; }
习题3-5 选择
输入一个n*n的字符矩阵,把它左转90度后输出。
#include<stdio.h> #define MAXN 5000 char a[MAXN][MAXN]; int main() { freopen("xt3-5.in","r",stdin); int i=0,j=0,k,n; while(scanf("%c",&a[i][j])==1) { if (a[i][j]!='\n') j++; else {i++;j=0;} //printf("i=%d j=%d\n",i,j); } n=i; for (i=0;i<=n;i++) { for (j=n;j>=0;j--) printf("%c",a[j][i]); if (i!=n)printf("\n"); } }
习题3-6 进制转换1
输入基数b(2<=b<=10)和正整数n(十进制),输出n的b进制表示。
#include<stdio.h> int main() { int a[10],b,i=0,j=0,n; scanf("%d %d", &b, &n); while(n>0) { a[i]=n%b; n=n/b; //printf("%d %d \n",n,a[i]); i++; } for(j=i-1;j>=0;j--) printf("%d",a[j]); return 0; }
习题3-7 进制转换2
输入基数b(2<=b<=10)和正整数n(b进制),输出n的十进制表示。
#include<stdio.h> int main() { int i=0,j=0,b,n,temp,wei=1,ji=1,sum=0; scanf("%d %d",&b,&n); temp = n; while (temp>0) { temp=temp/10; if (temp>0) wei*=10; } printf("wei=%d\n",wei); temp=n; while(wei>=1) { i=wei; while (i>1) { ji*=b; i=i/10; printf("i=%d %d\n",i,ji); } sum+=(temp/wei)*ji; printf("sum=%d\n",sum); temp=temp%wei; wei/=10; ji=1; } printf("%d",sum); return 0; }
习题3-8 手机键盘
输入一个由小写字母组成的英文单词,输出用手机的默认英文输入法的敲键序列。例如要打出pig这个单词,需要按1次p,3次i,(稍作停顿后)1次i,记为p1i3i1。
#include<stdio.h> #define MAXN 5000 int a[MAXN]; int main() { int i=0,j=0,temp=0; while(scanf("%c",&a[i])==1) { for(j=1;j<=8;j++) { if ((j==1)&&((temp=a[i]-96)<=3)&&(a[i]!='\n')) {printf("%c%d",a[i],temp);break;} if ((j==2)&&((temp=a[i]-99)<=3)&&(a[i]!='\n')){printf("%c%d",a[i],temp);break;} if ((j==3)&&((temp=a[i]-102)<=3)&&(a[i]!='\n')){printf("%c%d",a[i],temp);break;} if ((j==4)&&((temp=a[i]-105)<=3)&&(a[i]!='\n')){printf("%c%d",a[i],temp);break;} if ((j==5)&&((temp=a[i]-108)<=3)&&(a[i]!='\n')){printf("%c%d",a[i],temp);break;} if ((j==6)&&((temp=a[i]-111)<=4)&&(a[i]!='\n')){printf("%c%d",a[i],temp);break;} if ((j==7)&&((temp=a[i]-115)<=3)&&(a[i]!='\n')){printf("%c%d",a[i],temp);break;} if ((j==8)&&((temp=a[i]-118)<=4)&&(a[i]!='\n')){printf("%c%d",a[i],temp);break;} } i++; } return 0; }
相关文章推荐
- 《算法竞赛入门经典》习题答案 -- Chapter I
- 算法竞赛入门经典第一章习题答案
- 算法竞赛入门经典 习题2答案
- C++ Primer 第3章 标准库类型习题+答案
- 《C++编程思想》(第二版)第3章 C++中的C(笔记、习题及答案)(一)
- 《算法竞赛入门经典》习题答案 -- Chapter II
- C++ Primer 第3章 标准库类型习题+答案
- 算法竞赛入门经典——第3章答案
- C++ Primer 第3章 标准库类型习题+答案
- 算法竞赛入门经典(第2版)习题3-6 纵横字谜的答案 Crossword Answers UVa232
- Learning Perl 第3章习题答案
- 《C++编程思想》(第二版)第3章 C++中的C(笔记、习题及答案)(二)
- 算法竞赛入门经典 第2章 习题答案
- Oracle练习题+习题答案(4张表+46题)
- 《笨办法学python》加分习题37——我的答案
- C++ Peimer 第2章-变量和基本类型习题答案
- C++Primer第五版 第二章习题答案(21~30)
- [物理学与PDEs]第3章习题参考解答
- 算法竞赛入门经典 习题3-2单词们的平均长度
- 算法竞赛入门经典 第二版 习题4-4 骰子涂色 Cube painting uva253