后面跟着T行测试用例,每行为3正整数依次分别代表年月日(测试用例保证输入数据均合法,且年份在1900和2500之间,月份和日期保证处于当年数九的这段日子)。
输出格式
T行,每行对应一个测试用例,用两个数字表示是几九的第几天。
如二九第三天,则表示为23(两个数字之间有一个空格)。
输入样例
2
20111222
201225
输出样例
11
61
#include
intmain()
{
intn,i,sum,q,w,year,month,day;
inta[40]={0},b[40]={0};
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&year,&month,&day);
if( ((0==year%4)&&(0!
=year%100))||(0==year%400))
{
if(12==month) sum=day-21;
elseif(1==month) sum=day+10;
elseif(2==month) sum=day+41;
elseif(3==month) sum=day+70;
}
else {
if(12==month) sum=day-21;
elseif(1==month) sum=day+10;
elseif(2==month) sum=day+41;
elseif(3==month) sum=day+69;
}
q=sum/9+1;
w=sum%9;
if(0==w)
{a[i-1]=q-1;
b[i-1]=9;
}
else
{a[i-1]=q;
b[i-1]=w;
}}
for(i=1;i<=n;i++)
printf("%d%d\n",a[i-1],b[i-1]);
return0;
}
题目描述
根据输入的图形类别和高度,输出相应图形。
例如
,输入"triangle",7,则输出下列图形;
*
***
*****
*******
*****
***
*
输入“diamond”,7,则输出下列图形:
*
***
*****
*******
*****
***
*
输入格式
图形类型,图形高度
输出格式
对应图形
输入样例
triangle1
输出样例
*#include
#include
intmain()
{
inti,j,n,k;
charstr1[]={"triangle"},str2[10];
scanf("%s%d",str2,&n);
if(strcmp(str1,str2)==0)
{for(i=0;i<=(n-1)/2;i++)
{
for(j=0;j
printf("*");
printf("\n");
}for(i=(n-1)/2;i>0;i--)
{
for(j=i*2-1;j>0;j--)
printf("*");
printf("\n");
}}
else
{ for(i=1;i<=(n+1)/2;i++)
{for(j=1;j<=(n+1)/2-i;j++)
printf("%c",'');
for(j=1;j<=2*i-1;j++)
printf("*");
printf("\n");
}
for(i=(n-1)/2;i>=1;i--)
{for(j=1;j<=(n+1)/2-i;j++)
printf("%c",'');
for(j=1;j<=2*i-1;j++)
printf("*");
printf("\n");
}
}return0;
}
题目描述
一天,Jyc去915发现xdog和Arsenal4在很激烈的争论。
本以为他们在切题但一听却发现他俩在争论很无聊的问题,那就是21世纪的第一天是星期几?
这个本来查下日历就解决的问题却被他们兴高采烈地折腾这么久,一问才知道原来他俩实在是太懒了,谁都不愿去翻日历。
于是他俩就要求Jyc给他们写一个程序能很快地知道某个日期是星期几。
但Jyc最近很忙,实在抽不出空给这两个懒人写程序,这个问题就交给你们来解决了。
现在我们已经知道的是1900年的1月1号是星期一。
其余的规则跟正常的年历一样,有大小月,有闰月和闰年。
输入格式
只有一行,三个整数,y,m,d。
分别表示年份,月份和天,保证输入的年份是在1900年1月1日以后。
输出格式
只有一行显示星期几。
其表示方式为:
monday,tuesday,wednesday,thursday,friday,saturday,sunday。
输入样例
200011
输出样例
saturday
#include
intmain()
{
inta,b,c,year,month,day,sum=0;
scanf("%d%d%d",&year,&month,&day);
sum+=(year-1900)*365;
a=(year-1901)/4;
b=(year-1900)%4;
if(b!
=0)
{switch(month)
{
case1:
sum+=day;break;
case2:
sum+=day+31;break;
case3:
sum+=day+31+28;break;
case4:
sum+=day+31*2+28;break;
case5:
sum+=day+31*2+30+28;break;
case6:
sum+=day+31*3+30+28;break;
case7:
sum+=day+31*3+30*2+28;break;
case8:
sum+=day+31*4+30*2+28;break;
case9:
sum+=day+31*5+30*2+28;break;
case10:
sum+=day+31*5+30*3+28;break;
case11:
sum+=day+31*6+30*3+28;break;
case12:
sum+=day+31*6+30*4+28;break;
}
}
else
{
switch(month)
{
case1:
sum+=day;break;
case2:
sum+=day+31;break;
case3:
sum+=day+31+29;break;
case4:
sum+=day+31*2+29;break;
case5:
sum+=day+31*2+30+29;break;
case6:
sum+=day+31*3+30+29;break;
case7:
sum+=day+31*3+30*2+29;break;
case8:
sum+=day+31*4+30*2+29;break;
case9:
sum+=day+31*5+30*2+29;break;
case10:
sum+=day+31*5+30*3+29;break;
case11:
sum+=day+31*6+30*3+29;break;
case12:
sum+=day+31*6+30*4+29;break;}
}
sum+=a;
c=sum%7;
switch(c)
{
case2:
printf("tuesday");break;
case3:
printf("wednesday");break;
case4:
printf("thursday");break;
case5:
printf("friday");break;
case6:
printf("saturday");break;
case0:
printf("sunday");break;
case1:
printf("monday");break;
}
return0;
}题目描述
计算序列:
2/1,3/2,5/3,8/5,13/8,21/13…前n项之和
输入格式
n:
序列待求和项数,1~1000
输出格式
序列第1项至第n项之和,定点表示,2位小数
输入样例
2
输出样例
3.50
#include
intmain()
{
intn,i;
floatsum,b,c;
inta[1000]={1,1};
for(i=1;i<1000;i++)
a[i+1]=a[i]+a[i-1];
scanf("%d",&n);
for(i=1;i<=n;i++)
{
b=a[i];
c=a[i+1];
sum+=c/b;
}
printf("%.2f",sum);
return0;
}
题目描述
公元13世纪上半叶,蒙古军队一路西征杀向欧洲。
在进军途中,蒙古骑兵以旗为单位沿一条道路相继开进。
为了给后面的队伍指路,每当遇到一个道路分叉处时,就在路旁堆石头堆作路标,堆一堆石头表示直行,堆两堆石头表示右转,堆三堆石头表示左转。
试用C语言编写一个程序,计算出通过的路口数目。
假设每个相邻路口间路段的长度基本相等且开始的方向向西(以此判断第一个路口,即出发时向哪个方向走),用输出eswn四个字母或其组合来确定最终的地点相对于出发地(即第一个路口)的方位。
输入格式
只有一行,分别用1、2和3表示路口遇到的石碓的数量,最多有20个路口。
输出格式
只有一行,由一个数字和一个字母或两个字母组合分别构成路口的数目和最终地点与出发地的方位。
如果需要输出两个字母,则输出字母按照字典序输出(不用考虑回到原始出发点的情况)。
输入样例
31
输出样例
2,s
#include
#include
intmain()
{
inti,x=0,y=0,face=4;
charstr[21];
scanf("%s",str);
for(i=0;i {
if(face==4)
{
switch(str[i])
{case'1':
x-=1;face=4;break;
case'2':
y+=1;face=1;break;
case'3':
y-=1;face=3;break;}}
elseif(face==3)
{
switch(str[i])
{case'1':
y-=1;face=3;break;
case'2':
x-=1;face=4;break;
case'3':
x+=1;face=2;break;}}
elseif(face==2)
{
switch(str[i])
{case'1':
x+=1;face=2;break;
case'2':
y-=1;face=3;break;
case'3':
y+=1;face=1;break;}}
else
{
switch(str[i])
{case'1':
y+=1;face=1;break;
case'2':
x+=1;face=2;break;
case'3':
x-=1;face=4;break;}}
}
printf("%d,",strlen(str));
if(y>0&&x<0) printf("nw");
if(y==0&&x<0)printf("w");
if(y>0&&x>0)printf("en");
if(y==0&&x>0)printf("e");
if(y<0&&x<0)printf("sw");
if(y<0&&x>0)printf("es");
if(y>0&&x==0)printf("n");
if(y<0&&x==0)printf("s");
return0;
题目描述
投票者被分成K个组,如果超过半数的组投赞成票,决议就可以通过。
每组是投赞成票还是反对票也由每组内部投票决定,若这一组有超过半数
的人投赞成票,那么这一组就投赞成票。
例如有3组,分别有5,5,7人,那么,至少要有6个人赞成决议才能通过。
(即第一组和第二组各三人。
)
注意到共有17人,只需要6人赞成就有可能通过,所以本题题目叫《危险的民主》
编写程序,告诉你组数和每组的人数,计算通过决议至少需要多少人赞成。
输入格式
第一行是正整数K(K<=101),表示有k组
第二行有K个数,分别是每一组的人数。
K以及每组的人数都是奇数。
总人数不会超过10001。
输出格式
至少需要的人数
输入样例
3
575
输出样例
6
#include
#include
intmain()
{
inti,k,j,m,sum=0;
intb[101]={0};
inta[101]={0};
scanf("%d\n",&k);
for(i=0;i scanf("%d",&a[i]);
for(m=0;m {
for(i=0;i {
if(a[i]>a[i+1])
{
j=a[i];
a[i]=a[i+1];
a[i+1]=j;}}}
for(i=0;i<(k+1)/2;i++)