D[i]=abs(abs(a[i]-max)-abs(a[i]-min));
}
D_min=D[0];
for(i=1;iif(D_min>D[i]){
D_min=D[i];
m=a[i];
}
}
printf("%d",m);
return0;
}
二、按位转换整数到英文单词
题目描述
请把输入整数的每位数字转换成英文。
如当输入1024时,输出:
one,zero,two,four
输入
输入为一个整数
输出
按整数每一位输出其英文单词,单词间用逗号加空格分隔,单词由小写字母组成。
样例输入
20345
样例输出
two,zero,three,four,five
注意:
大家要考虑数据为"0"的情况,此时如果取对0取对数会出错
#include
#defineN200
intmain(){
intn,k,j,s;
inta[N];
scanf("%d",&n);
j=0;
s=0;
while(n!
=0){
k=n%10;
n=n/10;
a[j]=k;
j++;
s=s+j;
}
for(j=s-1;j>0;j--){
switch(a[j]){
case0:
printf("zero,");break;
case1:
printf("one,");break;
case2:
printf("two,");break;
case3:
printf("three,");break;
case4:
printf("four,");break;
case5:
printf("five,");break;
case6:
printf("six,");break;
case7:
printf("seven,");break;
case8:
printf("eight,");break;
case9:
printf("nine,");break;
}
}
switch(a[0]){
case0:
printf("zero");break;
case1:
printf("one");break;
case2:
printf("two");break;
case3:
printf("three");break;
case4:
printf("four");break;
case5:
printf("five");break;
case6:
printf("six");break;
case7:
printf("seven");break;
case8:
printf("eight");break;
case9:
printf("nine");break;
}
return0;
}
三、将字符串中的小写字母转换成大写字母
给定一个字符串,将其中所有的小写字母转换成大写字母
输入
一个字符串
输出
将输入的字符串中所有小写字母转换成大写字母后的字符串
样例输入
helloworld123Ha
样例输出
HELLOWORLD123HA
#include
#defineN200
intmain(){
inti;
charc,str[N];
gets(str);
i=0;
while(str[i]!
='\0'){
if(str[i]>='a'&&str[i]<='z'){
str[i]=str[i]-32;
}
i++;
}
puts(str);return0;
}
四、最长最短单词
输入1行单词(不多于200个单词),空格和逗号都是单词间的间隔,试输出第1个最长的单词和第1个最短单词。
如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。
输入
一行单词,空格和逗号都是单词间的间隔
输出
两行输出
第1行,第一个最长的单词
第2行,第一个最短的单词
样例输入
IamstudyingProgramminglanguageCinNanjingUniversityofInformationandTechnology
样例输出
Programming
#include
#includecharstr[4000];
charout[200][200];
intlength[200];
intmain(void){
gets(str);
inti,j=0,k=0,n=strlen(str);
for(i=0;iif(str[i]==''||str[i]==','){
out[j][k]='\0';
length[j]=strlen(out[j]);
j++;
k=0;
continue;
}
out[j][k++]=str[i];
}
intmax=0,min=0;
for(i=1;iif(length[max]max=i;
if(length[min]>length[i])
min=i;
}
puts(out[max]);
puts(out[min]);
return0;
}
五、计算绩点
学校对本科生的成绩施行平均学分绩点制(GPA)。
将学生的实际考分根据不同的学科的不同学分按一定的公式进行计算。
曾经使用的规定如下:
实际成绩绩点
90-1004.0
85-893.7
82-843.3
78-813.0
75-772.7
72-742.3
68-712.0
64-671.5
60-631.0
60以下0
1.一门课程的学分绩点=该课绩点*该课学分
2.总评绩点=所有学科绩点之和/所有课程学分之和
现要求你编写程序求出某人A的总评绩点(GPA)。
输入
第一行总的课程数n(n<10);
第二行相应课程的学分(两个学分间用空格隔开);
第三行对应课程的实际得分;
此处输入的所有数字均为整数。
输出
输出有一行,总评绩点,精确到小数点后2位小数。
(printf("%.2f",GPA);)
样例输入
5
43423
9188726956
样例输出
2.52
#include
#include
intmain(){
intn,i;
floata[10],c[10],b[10],sum=0,GPA,d;
scanf("%d",&n);
for(i=0;i<=n-1;i++)
scanf("%f",&a[i]);
for(i=0;i<=n-1;i++){
scanf("%f",&b[i]);
if(b[i]>=90)
c[i]=4.0;
elseif(b[i]>=85)
c[i]=3.7;
elseif(b[i]>=82)
c[i]=3.3;
elseif(b[i]>=78)
c[i]=3.0;
elseif(b[i]>=72)
c[i]=2.3;
elseif(b[i]>=68)
c[i]=2.0;
elseif(b[i]>=64)
c[i]=1.5;
elseif(b[i]>=60)
c[i]=1.0;
elseb[i]=0;
}
for(i=0;i<=n-1;i++)
sum+=a[i]*c[i];
for(i=0;i<=n-1;i++)
d+=a[i];
GPA=sum/d;
printf("%.2f",GPA);
return0;
}
六、按要求排序
输入
第一行为一个整数N(1<=N<=1000)
第二行为N个绝对值不超过10000的整数,表示需要排序的序列
输出
输出N行,为N个整数按升序排序后的序列样例输入
6
100201681099
样例输出
681099100201
提示
这N个数需要随机产生
#include
#defineN1000
intmain(){
inta[N];
intn,i,j,temp;
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
}
for(j=0;jfor(i=0;iif(a[i]>a[i+1]){
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
for(i=0;iprintf("%d",a[i]);
printf("\n");
return0;
}
七、计算多项式的值
多项式f(x)=ax3+bx2+cx+d
输入
输入仅一行,分别是x,及参数a、b、c、d的值,每个数都是双精度浮点数。
输出
输出也仅一行,f(x)的值,保留小数点后7位。
样例输入
2.311.2223
样例输出
33.0838692
提示
使用printf("%.7lf",...)实现保留小数点后7位。
#include
doublef(doublex,doublea,doubleb,doublec,doubled);
intmain(){
doublex,a,b,c,d,e;
scanf("%lf%lf%lf%lf%lf",&x,&a,&b,&c,&d);
if(x==0.0)
printf("inputerror");
else{
e=f(x,a,b,c,d);
printf("%.7lf",e);
}
return0;
}
doublef(doublex,doublea,doubleb,doublec,doubled){
doublee,p=1.0,g;
inti;
for(i=0;i<3;i++){
p=p*x;
}
g=x*x;
e=a*p+b*g+c*x+d;
returne;
}
八、计算两个分数的和
输入两个分数,形式如1/2,计算它们的和,以分数形式输出
输入
第一行为第一个分数第二行为第二个分数
输出
两个分数的和
样例输入
1/2
3/4
样例输出
5/4
#include
intmain(){
intx,y,a,b,m,n,temp,r,p,t,z;
scanf("%d/%d",&x,&y);
scanf("%d/%d",&a,&b);
m=x*b+y*a;z=m;
n=y*b;t=n;
if(ntemp=n;
n=m;
m=temp;
}
while(m!
=0){
r=n%m;
n=m;
m=r;p=n;
}
printf("%d/%d",z/p,t/p);
return0;
}
九、登山
五一到了,NUIST-ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。
同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。
队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?
输入
Line1:
N(2<=N<=1000)景点数
Line2:
N个整数,每个景点的海拔
输出
最多能浏览的景点数
样例输入
8
186186150200160130197220
样例输出
4
#include
intf(inta[1000],intn);
intmain(){
intn,a[1000],i,m;
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
}
m=f(a,n);
printf("%d",m);
return0;
}
intf(inta[1000],intn){
inti,j=1,s,m,b[1000];
for(m=n;m>0;m--){
for(i=1;iif(a[i]>a[i-1]){
j++;
}
for(i=m-1;iif(a[i]j++;
}
}
}
b[n-m]=j;
j=1;
}
s=b[0];
for(i=1;iif(s
s=b[i];
}
}
returns;
}
十、计算平均年龄
#include
intmain(){
intn,m,i;
floatb,a=0.0;
scanf("%d",&n);
for(i=0;iscanf("%d",&m);
a=a+m;
}
b=a/n;
printf("%.2f",b);
return0;
}
十一、数圈
以1为中心,用2,3,。
。
。
,n的数字围绕着中心输出一个数圈,若n=4
78910
61211
54312
16151413
输入
一个整数n(1<=n<=10)
输出
一个数圈
样例输入
5
样例输出
2122232425
2078910
1961211
1854312
1716151413
#include
#defineN10
intmain(){
intnum[N][N];
intcircle=2,row,column,n,i=1,j;//circl为每转半圈的数字个数
scanf("%d",&n);
/*确定开始的那个1的位置*/
if(n%2)
row=column=n/2;
else
row=column=n/2-1;
num[column][row]=i++;
num[column][++row]=i++;
while(circle<=n){
j=1;
while(j<=circle-1){
/**当circle为奇偶数时,行的增减不一样**/
if(circle%2)
num[--column][row]=i++;
else
num[++column][row]=i++;
j++;
}
circle++;
j=1;
while(j<=circle-1){/*同上**/
if(circle%2)
num[column][--row]=i++;
else
num[column][++row]=i++;
j++;
}
}
for(i=0;ifor(j=0;jprintf("%3d",num[i][j]);
printf("\n");
}
return0;
}
十二、放苹果
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?
(用K表示)5,1,1和1,5,1是同一种分法。
输入
第一行是测试数据的数目t(0<=t<=20)。
以下每行均包含二个整数M和N,以空格分开。
1<=M,N<=10。
输出
对输入的每组数据M和N,用一行输出相应的K。
样例输入
173
样例输出
8
#include
intf(intm,intn){
if(m==1||n==1){
return1;
}elseif(m==n){
return1+f(m,m-1);
}elseif(mreturnf(m,m);
}elseif(m>n){
returnf(m,n-1)+f(m-n,n);
}
return0;
}
intmain(){
intt(0);
scanf("%d",&t);
for(inti=0;iintm(0),n(0);
scanf("%d%d",&m,&n);
printf("%d\n",f(m,n));
}
return0;
}
十三、计算约数的和
给你一个数字求它的所有约数的和。
比如12,约数有1,2,3,4,6,12加起来是28
现在给你一个数字I。
(1<=I<=1,000)
输入一个数字I
输出约数之和样例输入
12
样例输出
28
#include
intmain(){
inti,m,sum;
scanf("%d",&m);
for(i=1,sum=0;iif(m%i==0)
sum+=i;
}
printf("%d",sum);
return0;
}
十四、冒泡排序
#include
#defineN5
intmain(){
inta[N];
inti,j,temp;
for(i=0;iscanf("%d",&a[i]);
for(j=0;j<=N-2;j++){
for(i=0;iif(a[i]>a[i+1]){
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
printf("\n");
for(i=0;iprintf("%d",a[i]);
printf("\n");
return0;
}
十五、构造新的模运算
给定整数a,b,n,要求计算(a^b)modn
输入多组数据,每组数据一行,为三个用空格隔开的整数a,b,n
1<=a<=40,0<=b<=3,1<=n<=500
输出每组数据输出一行,为所求值
样例输入
235
224
样例输出
3
0
#include
intmain(){
inta,b,n;
while(scanf("%d%d%d\n",&a,&b,&n)!
=EOF){
printf("%d\n",(int)(pow(a,b))%n);
}
return0;
}
十六、最大最小值
#include
#defineN100
intmain(){
intn,i,max,min;
inta[N];
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
}
max=a[0];min=a[0];
for(i=1