C语言考试平台_c语言考试平台图文
C语言考试平台由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言考试平台图文”。
一 A+B Problem
Time Limit:1000MS Memory Limit:65536K
Total Submit:2153 Accepted:1096 Description
Calculate a+b
Input
Two integer a,b(0
Output
Output a+b
Sample Input 2
Sample Output
Hint
Here is a sample solution for problem using C/GCC:
#include
int main(){
int a,b;
scanf(“%d %d”,&a, &b);printf(“%dn”,a+b);return 0;}
#include
int main(){
int a,b;
scanf(“%d %d”,&a, &b);printf(“%dn”,a+b);return 0;}
二
第三届程序设计大赛 让气球飞起来
Time Limit:1000MS Memory Limit:65536K
Total Submit:325 Accepted:103 Description
比赛又一次开始了,看着气球漂浮在周边是多么兴奋的事情啊,但是告诉你一个秘密,裁判最喜欢做的事情就是猜一个问题,即数目最多的气球颜色。当比赛结束时,他们会数每种颜色的气球数目并公布结果。今年,他们决定将数气球的事情交给你做。
Input
测试数据第一行是一个N(0
Output
对于每组测试数据,对应一行输出颜色最多的气球颜色,测试数据能保证对应的结果唯一。Sample Input green red blue red red
Sample Output
red
Source
#include #include int main(){
int a[100]={0};char str[100][16];int x,i,j;scanf(“%d”,&x);for(i=0;i
scanf(“%s”,&str[i][0]);} for(i=0;i
for(j=i;j
if(strcmp(&str[i][0],&str[j][0])==0)
++a[i];}
for(i=1;i
if(a[0]
{
strcpy(&str[0][0],&str[1][0]);
}
a[0]=a[i];} } printf(“%s”,&str[0][0]);return 0;
三
3_6搬砖问题
Time Limit:1000MS Memory Limit:65536K
Total Submit:2842 Accepted:823 Description
某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块,有多少种搬法用45人正好搬45块砖?
Input
无
Output
men= women= child=
Sample Input
无
Sample Output
men=0 women=15 child=30 men=3 women=10 child=32 men=6 women=5 child=34 men=9 women=0 child=36 Source
#include main(){ float c,y,m,w;for(m=0;m
for(w=0;w
{
c=45-m-w;
y=m*3.0+w*2.0+c/2.0;
if(y==45)
printf(“men=%.0f women=%.0f child=%.0fn”,m,w,c);
} } return 0;}
四
3_3统计不同类型字符
Time Limit:1000MS Memory Limit:65536K
Total Submit:1954 Accepted:397 Description
输入一行字符,分别统计其中英文字母、空格、数字和其它字符的个数。
Input
键盘上的任意字符串,以;结束。Output
character= ,blank= ,digit= ,other=;
Sample Input
case 1:printf(“very good!”);
Sample Output
character=18,blank=2,digit=1,other=6;
Source
#include #include main(){ char str[100];int c=0,b=0,d=0,o=0;int i,sum=0;for(i=0;;i++){
scanf(“%c”,&str[i]);
++sum;
if(str[i]==';')
break;} for(i=0;i
if(str[i]>='a' && str[i]='A')
++c;
else if(str[i]==' ')
++b;
else if(str[i]='0')
++d;
else
++o;} printf(“character=%d,blank=%d,digit=%d,other=%d;”,c,b,d,o);}
return 0;
五
3_5求正整数的位数及各位数字和
Time Limit:1000MS Memory Limit:65536K
Total Submit:2612 Accepted:585 Description
输入个正整数num,求它的位数以及各位数字之和。
Input
正整数num(0≤num≤100000)
Output
位数n;各位数字之和sum。
Sample Input
123
Sample Output
n=3;sum=6
Source
#include main(){
} int a[50]={0};int x,sum=0,n=0;int i,them,p=10;scanf(“%d”,&x);them=x;for(i=0;;i++){ them/=10;++n;if(them==0)
break;} for(i=1;i
六
3_4计算无限序列
Time Limit:1000MS Memory Limit:65536K
Total Submit:1025 Accepted:530 Description
输入一个正整数n,计算1-1/4+1/7-1/10+1/13-1/16+...的前n项之和,输出时保留3位小数。Input
正整数n(1≤n≤20)
Output
结果保留3位小数。
Sample Input
Sample Output
0.893
Source
#include #include main(){ float x,y=1,p=1,sum=0;int n,i=1;scanf(“%d”,&n);while(i
sum+=p;
y=y+3;
if(i%2==0)
p=1/y;
else
p=-1/y;
++i;} printf(“%.3f”,sum);return 0;}
七
3_1分段程序求值
Time Limit:1000MS Memory Limit:65536K
Total Submit:1617 Accepted:662 Description
输入x,计算并输出下列分段函数f(x)的值。
Input
实数x(-20≤n≤20)
Output
保留2位小数。
Sample Input
Sample Output
-3.00
Source
#include #include main(){
}
float x,y;scanf(“%f”,&x);if(x
八
3_2二次方程求根
Time Limit:1000MS Memory Limit:65536K
Total Submit:2476 Accepted:554 Description
输入参数a、b、c,求一元二次方程ax2+bx+c=0的根。
Input
三个实数a、b、c,并确保Δ≥0。
Output
方程两个实根,保留两位小数。
Sample Input 2-8
Sample Output x1=2.00 x2=-4.00
Source
#include #include main(){ float a,b,c;float x1,x2;scanf(“%f%f%f”,&a,&b,&c);x1=(-b+sqrt(b*b-4*a*c))/(2*a);x2=(-b-sqrt(b*b-4*a*c))/(2*a);printf(“x1=%.2f x2=%.2f”,x1,x2);return 0;}
九
Exp3_1温度转换
Time Limit:1000MS Memory Limit:65536K
Total Submit:1263 Accepted:542 Description
输入一个华氏温度f,要求输出摄氏温度c。公式为c=5/9(f-32)。
Input
华氏温度
Output
摄氏温度,保留2位小数。Sample Input
100.25
Sample Output
37.92
Source
#include #include main(){ float f,c;scanf(“%f”,&f);c=5.0/9.0*(f-32.0);printf(“%.2f”,c);return 0;}
十
Exp3_5手机收费
Time Limit:1000MS Memory Limit:65536K Total Submit:1518 Accepted:684 Description
假设手机有两种收费方式,第一种是每分钟0.6元,无月租费;另一种是每分钟0.4元再收50元月租费,输入一个月打电话的时间(分钟),判断那一种方案更省钱。
Input 输入一个月打电话的时间,整型。
Output
输出最经济的话费,实型,保留两位小数。
Sample Input
Sample Output
60.00
Source
#include #include main(){ float m1,m2;int t;scanf(“%d”,&t);m1=0.6*t;m2=50.0+0.4*t;if(m1>m2)
printf(“%.2f”,m2);else
printf(“%.2f”,m1);return 0;}
十一
Exp3_6税收问题
Time Limit:1000MS Memory Limit:65536K
Total Submit:1350 Accepted:396 Description
假设某国家收税是分段计费,标准如下:在1万元以上部分收税20%;5000-10000元部分收税10%;1000-5000元部分收税5%;1000元以下部分免税。根据输入的金额计算应缴纳的税金。
如:某人收入是12000元,则应缴纳的税金为4000*5%+5000*10%+2000*20%=1100元
Input
输入一个月的收入,实型。
Output
输出应缴纳的税金,实型,保留两位小数。
Sample Input
12000
Sample Output
1100.00
Source
#include main(){ float x,sum;scanf(“%f”,&x);if(x
sum=0;else if(x
sum=(x-1000.0)*0.05;else if(x
sum=(x-5000.0)*0.1+200.0;
}
else sum=(x-10000.0)*0.2+700.0;printf(“%.2f”,sum);return 0;
十二
第三届程序设计大赛 大优惠
Time Limit:1000MS Memory Limit:65536K
Total Submit:680 Accepted:212 Description
中国移动推出最新的手机资费优惠方案,按照这个方案Tom的手机每天消费1元,每消费K元就可以获赠1元,一开始Tom有M元,问最多可以用多少天?
Input
输入的测试数据为一行,实例包括2个整数M, K(2
Output
输出一个整数,表示M元可以用的天数。
Sample Input 3
Sample Output
Source #include main(){ int m,k;int d=0,i;scanf(“%d%d”,&m,&k);for(i=1;i
++d;
if(i==k)
{
++m;
i=0;
}
if(d==m)
break;} printf(“%d”,d);return 0;}
十三
第三届程序设计大赛 阶乘之和
Time Limit:1000MS Memory Limit:65536K
Total Submit:143 Accepted:76 Description
给你一个非负数整数N,判断N是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No
Input
第一行有一个整数M(0
每组测试数据有一个正整数N(0
如果符合条件,输出Yes,否则输出No;
Sample Input 24 29 31
Sample Output
Yes No Yes
Source
#include main(){ long int n[101],a[101];int m,p=0;long int y=0,them=1;int i,j,k;scanf(“%d”,&m);for(i=0;i
scanf(“%d”,&n[i]);for(i=0;i
p=0;
y=0;
them=1;
for(j=1;j
{
y+=them;
a[j]=them;
them*=(j+1);
if(them>=n[i])
{
}
for(k=j;k>0;k--)
{
if(n[i]-a[k]==0)
{
p=1;
break;
}
else if(n[i]-a[k]>0)
n[i]=n[i]-a[k];
}
} } if(p==1)
printf(“Yesn”);else
printf(“Non”);} return 0;
十四
第三届程序设计大赛 五彩的卡片
Time Limit:1000MS Memory Limit:65536K
Total Submit:132 Accepted:60 Description
Tom拥有许多色彩缤纷的卡片,一共有4种颜色,分别为:红,绿,蓝,黄。
Tom随机取出N张卡片排成一列,他突然觉得不够美观。他决定替换掉某些卡片使得相邻两张卡片的颜色各不相同。
你的任务就是帮他计算出至少需要替换掉的卡片数量。由于每种颜色的卡片他都有很多,所以可以认为每种颜色的卡片数量是无限的。
Input 输入数据的第一行为一个整数N,表示序列中有N个字符(1
Output
输出一个整数C,表示至少需要替换掉的卡片数。
Sample Input RGGBBBRYYB
Sample Output
Source
#include main(){ int n,m=0,i;char str[10000];scanf(“%d”,&n);scanf(“%s”,str);for(i=1;i
if(str[i]==str[i-1])
{
str[i]='0';
++m;
} } printf(“%d”,m);return 0;}
十五
第三届程序设计大赛 汽车加油
Time Limit:1000MS Memory Limit:65536K
Total Submit:296 Accepted:74 Description
一辆汽车加满油后可行驶N公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。
Input
第一行有2 个正整数N和K(1
Output
将编程计算出的最少加油次数输出。如果无法到达目的地,则输出
No Solution(注意:No和Solution之间有一个空格)
Sample Input 8 3 2 3 6 5 4 2 7 2
Sample Output
Source
#include main(){
}
int n,k,p=1,time=0;int i;int a[102];scanf(“%d%d”,&n,&k);for(i=0;in){
p=0;
break;} } for(i=1;in){
++time;}
else if(a[i]+a[i-1]==n){
++time;
++i;} else {
a[i]=a[i-1]+a[i];} } if(p==1)printf(“%d”,time);else printf(“No Solution”);return 0;
十六
第三届程序设计大赛 搬果实
Time Limit:1000MS Memory Limit:65536K
Total Submit:161 Accepted:55 Description
在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆,只有相邻的两堆可以合并。
每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过N-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。
因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。
Input
输入包括两行,第一行是一个整数N(1
Output
包括一行,这一行只包含一个整数,也就是最小的体力耗费值。
Sample Input 1 2 9
Sample Output Source
#include main(){ int n,sum=0,p,temp,k;int a[105]={0},b[104]={0};int i,j;scanf(“%d”,&n);for(i=0;i
scanf(“%d”,&a[i]);k=n;while(k>=2){
temp=0;
for(i=0;i
{
b[i]=a[i]+a[i+1];
}
for(i=0;i
if(b[0]>b[i])
{
b[0]=b[i];
temp=i;
}
sum+=b[0];
a[temp]=b[0];
for(i=temp+1;i
{
a[i]=a[i+1];
}
--k;} printf(“%d”,sum);return 0;}
测试时用的数据
#include main(){ int n,sum=0,p,temp,k;int a[105]={0},b[104]={0};
}
int i,j;scanf(“%d”,&n);for(i=0;i=2){ temp=0;for(i=0;i
b[i]=a[i]+a[i+1];
printf(“%d****”,b[i]);} for(i=0;i
if(b[0]>b[i])
{
b[0]=b[i];
temp=i;
} sum+=b[0];printf(“b[0]=%d,sum=%d,temp=%d”,b[0],sum,temp);a[temp]=b[0];for(i=temp+1;i
a[i]=a[i+1];}--k;for(i=0;i
printf(“..%d..”,a[i]);printf(“,k=%d”,k);printf(“n”);} printf(“%d”,sum);return 0;
十七 第三届程序设计大赛 哥德巴赫猜想
Time Limit:1000MS Memory Limit:65536K
Total Submit:134 Accepted:60 Description
1742年,哥德巴赫在给好友欧拉的一封信里陈述了他著名的猜想——哥德巴赫猜想:任何一个大于4的偶数都是两个素数之和。
例如:
8=3+5,3和5都是素数。
20=3+17=7+13
42=5+37=11+31=13+29=19+23
你的任务是写出10000以内的哥德巴赫猜想。
Input
输入包含一组或多组测试数据。
测试数据每一行是一个偶数N(0
输入数据以0为结束符,0不需要处理。
Output
对于每行测试数据,对应一行形式为N=a+b输出(a
Sample Input 20 42 0
Sample Output
8=3+5 20=3+17 42=5+37 Source
#include #define N 10000 main(){ int n[N];int k=0,p,a,b;int str[10002];int i,j,v,m=0,x;for(i=2;i
x=0;
for(j=2;j
{
if(i%j==0)
x=1;
}
if(x==0)
{
str[m]=i;
++m;
} } for(i=0;;i++){
scanf(“%d”,&n[i]);
++k;
if(n[i]==0)
break;}--k;for(i=0;i
p=1;
for(j=0;j
{
for(v=m;v>=0;v--)
{
if(n[i]==str[j]+str[v])
{
a=str[j];
b=str[v];
}
}
}
}
} printf(“%d=%d+%dn”,n[i],a,b);p=0;break;if(p==0)break;return 0;
十八
第二届程序设计大赛 亏多少?
Time Limit:1000MS Memory Limit:65536K
Total Submit:91 Accepted:71 Description
商人能赚钱也能赔钱。
比如,商人吕不韦花40元买了某商品,他决定70元卖掉。一个顾客给了吕不韦100元,吕不韦找了他30元,理论上吕不韦赚了30元。但很不幸,吕不韦发现那100元是假的,于是他亏了70元(40元商品+30元的找钱)。
Input
我们有多组测试数据,第一行是一个X(1
接下来的X行中,每行由4个数字构成,分别为N,M,P和C(数字范围0-32767),数字之间以一个空格分开。
N:商品的成本
M:商品的售价
P:吕不韦收到假钱总数 C:吕不韦找给顾客的钱
其中:N
Output
每行输入数据对应一个输出数据,告诉吕不韦亏多少钱,如果还是赚钱的,那么请输出负数。
Sample Input 40 70 100 30 40 70 50 20 14604 32391 3902 153
Sample Output
20-13885
Hint
提示:例子2分析:顾客支付了90元(50元假钱+40元真钱),吕不韦亏了20元(得到40元真钱-找给顾客20元-40元商品价格)
Source
#include int main(){ int x,n,m,p,c;int sum[21]={0};int i;scanf(“%d”,&x);for(i=0;i
scanf(“%d %d %d %d”,&n,&m,&p,&c);
if(p==m+c)
sum[i]+=(c+n);
}
else
sum[i]+=(n+p-m);} for(i=0;i
十九
第二届程序设计大赛 IP地址
Time Limit:1000MS Memory Limit:65536K
Total Submit:110 Accepted:57 Description
常见的IP地址的表示方式为x.x.x.x,如172.16.163.66,它还可以用“位”来表示。
你的任务是将32个‟0‟和‟1‟构成的二进制序列转换为十进制的表示格式,每8位之间以‟.‟间隔。
Input
输入数据第一行是一个正整数N(1
接下来的N行表示N组数据。
Output
每行输入数据对应一行输出数据。
每行输入的二进制数据对应一个十进制的输出数据,每8位以‟.‟间隔。
Sample Input 4 ******00 ******11 ******00 ******01
Sample Output
0.0.0.0 3.128.255.255 203.132.229.128 80.16.0.1
Source
#include int fact(int n);int main(){ int n,i,j,k;int a[20][4]={0},b[8];char str[32];scanf(“%d”,&n);for(i=0;i
scanf(“%s”,str);
for(k=0;k
{
for(j=8*k;j
{
if(str[j]=='0')
b[j-8*k]=0;
else
b[j-8*k]=fact(7-j+8*k);
}
for(j=8*k;j
a[i][k]+=b[j-8*k];
}
} for(i=0;i
printf(“%d.%d.%d.%dn”,a[i][0],a[i][1],a[i][2],a[i][3]);return 0;} int fact(int n){ int res;if(n==0)
res=1;else
res=2*fact(n-1);return res;}
二十
求和问题
Time Limit:1000MS Memory Limit:65536K
Total Submit:861 Accepted:349 Description
求s=a+aa+aaa+aaaa+aaa……a的值,其中a是一个数字,例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘输入。
Input
输入的测试数据为1行,实例包括2个整数,分别是a的值和加数的个数。
Output
输出1个整数,表示求和结果。
Sample Input 5 Sample Output
37035
Source
#include int main(){ int a,n,sum=0,p=1;int j;scanf(“%d%d”,&a,&n);
for(j=n;j>0;j--)
{
p=a*j;
a*=10;
sum+=p;
} printf(“%d”,sum);return 0;}
二十一
Problem A:字符串
Time Limit:1000MS Memory Limit:65536K
Total Submit:277 Accepted:132 Description
从键盘中输入一串字符串(长度不超过80个字符),假定输入的字符串中只含有字母和#号,请将字符串中的前导#全部移到字符串的尾部,中间的#保持不变。可使用数组或指针实现,不能使用字符串复制函数。Input
输入一串字符串,长度不超过80个字符,只包含字母和#号,并且以#开头和结束。
Output
输出移动后的字符串。
Sample Input
#####A#BC#DEF#G###
Sample Output
A#BC#DEF#G
#
Source
#include #include int main(){ char str[80];int i,j,k=0;scanf(“%s”,str);for(i=0;i
if(str[i]>='a' && str[i]='A')
{
break;
} for(j=i;j
if(j
printf(“%c”,str[j]);
else
{
printf(“%c”,str[k]);
k++;
} return 0;}
二十二
完数
Time Limit:1000MS Memory Limit:65536K
Total Submit:540 Accepted:307 Description
输入一个正整数x,判断是否为完数。说明:“完数”是指这个数正好等于它的因子之和。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”
Input
一个正整数。
Output
yes 或者 no
Sample Input
Sample Output
yes
Source
#include int main(){
}
int n,sum=0;int i,j;scanf(“%d”,&n);for(i=1;i
sum+=i;} } if(sum==n)printf(“yes”);else printf(“no”);return 0;
二十三
多项式求和
Time Limit:1000MS Memory Limit:65536K
Total Submit:462 Accepted:282 Description
输入一个正整数m,计算y的值(y=1+1/3+1/5+1/7+…+1/(2m+1))。
Input
一个正整数。
Output
一个实数,保留小数点后六位。Sample Input
Sample Output
2.133256
Source
#include int main(){ float m,sum,y=1,i;scanf(“%f”,&m);for(i=1;i
y+=1.0/(2*i+1);
} printf(“%f”,y);return 0;}
二十四
求和问题
Time Limit:1000MS Memory Limit:65536K
Total Submit:715 Accepted:303 Description
计算1-x/2+x/3-x/4+……+x/99-x/100的值。其中,x是一个正整数。(1000)
输入一个正整数,代表x的值。
Output
输出一个实数,表示求和结果,保留2位小数。
Sample Input
Sample Output
0.69
Source
#include int main(){ int x;float y,temp=1.0,i,sum=1;scanf(“%d”,&x);for(i=2;i
temp*=-1;
y=temp*x/i;
sum+=y;} printf(“%.2f”,sum);return 0;}
二十五
求和问题
Time Limit:1000MS Memory Limit:65536K
Total Submit:237 Accepted:151 Description
计算1+x/2-x/3+x/4-x/5+……+x/98-x/99+x/100的值。其中,x是一个正整数。
Input
输入一个正整数,代表x的值。
Output
输出一个实数,表示求和结果,保留2位小数。
Sample Input
Sample Output
1.31
Source
#include int main(){ int x;float y,temp=1.0,i,sum=1;scanf(“%d”,&x);for(i=2;i
y=temp*x/i;
sum+=y;
temp*=-1;}
}
printf(“%.2f”,sum);return 0;
二十六
判断字符类型
Time Limit:1000MS Memory Limit:65536K
Total Submit:152 Accepted:70 Description
判断输入的单个字符是否为小写字母。
Input
输入单个字符。
Output
是小写字母,屏幕输出Yes 不是小写字母,屏幕输出No
Sample Input
a
Sample Output
Yes
Source #include int main(){ char ch;scanf(“%c”,&ch);if(ch='a')
printf(“Yes”);else
printf(“No”);return 0;}
二十七
级数求和问题
Time Limit:1000MS Memory Limit:65536K
Total Submit:209 Accepted:66 Description
计算x-x/2+x/3-x/4+…+x/99-x/100+…,直到最后一项的绝对值小于0.00001为止。
Input
正整数x(1 =
Output
一个实数,小数点后保留2位。
Sample Input Sample Output
2.08
Source
#include #include int main(){ int x;float i,y,sum=0,temp=1;scanf(“%d”,&x);for(i=1;;i++){
y=temp*x/i;
temp*=-1;
sum+=y;
if(fabs(y)
break;} printf(“%.2f”,sum);return 0;}
二十八
符合条件的数
Time Limit:1000MS Memory Limit:65536K
Total Submit:118 Accepted:66 Description 一个正整数与3的和是5的倍数,与3的差是6的倍数,编写一个程序求符合条件的前n个数。
Input
正整数n(1 =
Output
符合条件的数,每个一行。
Sample Input
Sample Output 57 87 117 147 Source
#include
int main(){ int n,x[500],i,k=0;for(i=1;i
if((i+3)%5==0 &&(i-3)%6==0)
{
x[k]=i;
++k;
} } scanf(“%d”,&n);for(i=0;i
}
printf(“%dn”,x[i]);return 0;
二十九
Problem B:交换字符
Time Limit:1000MS Memory Limit:65536K
Total Submit:97 Accepted:42 Description
从键盘中输入一串字符串(长度不超过80个字符),假定输入的字符串中只含有字母和数字,请将字符串中的前导数字全部移到字符串的尾部,中间的数字保持不变。可使用数组或指针实现,不能使用字符串复制函数。
Input
输入一串字符串,长度不超过80个字符,只包含字母和数字,并且以数字开头和结束。
Output
输出移动后的字符串。
Sample Input
1234A5BC6DEF7G89
Sample Output
A5BC6DEF7G891234
#include #include int main(){ char str[80];int i,j,k=0;scanf(“%s”,str);for(i=0;i
if(str[i]>='a' && str[i]='A')
{
break;
} for(j=i;j
if(j
printf(“%c”,str[j]);
else
{
printf(“%c”,str[k]);
k++;
} return 0;}
三十
PK赛
Time Limit:1000MS Memory Limit:65536K
Total Submit:397 Accepted:222 Description
一年一度的厦门理工学院程序设计大赛又开始了,今年是第五届。今年赛会组织方决定用一种新规则决定获胜的选手。在每一轮比赛中,参赛者都是成对的,两两比赛。输者将被淘汰,赢者将自动晋级到下一轮比赛中。比赛一直进行到只剩一个人为止,这个人就是冠军。
在一轮比赛中,如果比赛人数不是偶数,那么将随机选择一个参赛者自动晋级下一轮,而其它人还是一对一地完成本轮比赛。赛会组织方想知道要产生冠军需要进行多少轮比赛。
Input
参赛的人数N(1
Output
比赛需要的总轮数。
Sample Input
Sample Output
Source
#include
int main(){ int n,sum=0,i;scanf(“%d”,&n);for(i=1;;i++){
if(n%2!=0)
{
--n;
n/=2;
++n;
++sum;
}
else
{
n/=2;
++sum;
}
} if(n==1)
break;} printf(“%d”,sum);return 0;
三十一
第四届程序设计大赛 数字四的游戏
Time Limit:1000MS Memory Limit:65536K
Total Submit:314 Accepted:113 Description
一年一度的厦门理工学院程序设计大赛又开始了,今年是第四届。今年赛会组织方决定用一种新规则决定获胜的选手。他们将参赛选手从1编号到N并围成一圈,从第一个人开始报数,报到4的人退出,下一个人从 1 开始重新报数,报到4 的人退出。如此循环,直到留下最后一个人,他就是获胜者。
Input
参赛的人数N(1
Output
获胜选手的编号。
Sample Input
Sample Output 1
Source
#include int main(){ int a[1001]={0};int i=1,k;int n,p=0;scanf(“%d”,&n);for(i=1;i
a[i]=i;k=n;i=1;while(k!=1){
if(a[i]!=0)
++p;
if(p==4)
{
a[i]=0;
p=0;
--k;
}
if(i==n)
{
i=0;
}
++i;} for(i=1;i
if(a[i]!=0)
printf(“%d”,a[i]);return 0;}
三十二
搬家的烦恼
Time Limit:1000MS Memory Limit:65536K
Total Submit:635 Accepted:76 Description
理工学院的学生每个学年结束以后都要搬宿舍,搬宿舍的烦恼还只是暂时的,搬宿舍以后发现插座不够用是永远的伤痛。
同学们发现新宿舍只有一个插座,但他们有很多台电脑需要同时使用,于是他们买来了好几个排插,每个排插可支持的插头不一样多,你的任务是帮他们计算一下他们的排插能支持多少台电脑同时使用。(注意:排插本身也需要电源接入)
Input
输入数据由一个整数N打头(1
接下来是N行,每行描述了一个测试案例。每个测试案例以一个整数K打头(1
Output
每个测试案例对应一行整数输出,这个整数表示最多能支持的电脑数量。
Sample Input 3 2 3 4 4 10 10 10 10
Sample Output 37
Source
#include int main(){ int n,k,a[11],y,sum;int i,j;scanf(“%d”,&n);for(i=0;i
sum=0;
scanf(“%d”,&k);
for(j=0;j
{
scanf(“%d”,&y);
sum+=y;
}
a[i]=sum-k+1;} for(i=0;i
printf(“%dn”,a[i]);return 0;}
三十三
Description
输入一个正整数m,计算y的值(y=1+1/2+1/4+1/6+…+1/(2m))。
Input
一个正整数。
Output
一个实数,保留小数点后2位。
Sample Input