Description
按年计算,表示100元存1年的利息为3.7元.实际上有时提前有时推迟取,因此实际利息按天
计算,1年按365天计算,因此Q天的利息是
本金*3.7/100 *Q/365
存了100天后1年定期年利息提高到3.9%。如将存款提前全取出,再存1年定期。那么前面的
100天只能按活期利息1.7%计算。
100天的利息和本金:10000(1+1.7/100*100/365)=10046.6
再存1年定期 :10046.6(1+3.9/100)=10438.4
得到的利息加本金为10438.4
如果无视利息的提高,再存1年。得到的利息加本金为(定期推迟取,利率不变)
10000(1+3.7/100*(100+365)/365)=10471.4
Input
Q-已存天数<=365,e-活期利率,f-定期利率,g-提高后的定期利率.
Output
第1行,提前支取后再存1年所得本金和利息.
第2行,继续存1年,Q+365天后所得本金和利息.
Sample Input
4 10000 100 2.3 3.7 3.9 10000 100 1.7 3.7 3.9 10000 200 1.7 3.7 3.9 10000 300 1.7 3.7 3.9
Sample Output
10455.5 10471.4 10438.4 10471.4 10486.8 10572.7 10535.210674.1
这道题刚开始看觉得巨麻烦,耐着性子看完后发现题目有公式,直接上代码,,
#include<stdio.h> int main() { int T; scanf("%d",&T); while(T--) { int Y,Q; double e,f,g; double s1,s2,s3; scanf("%d%d%lf%lf%lf",&Y,&Q,&e,&f,&g); s1=Y*(1+e/100*Q/365); s2=s1*(1+g/100); s3=Y*( 1+f/100*( Q+365 )/365 ); printf("%.1lf\n%.1lf\n",s2,s3); } return 0; }
Description
Give you the width and height of the rectangle,darw it.Input
Input contains a number of test cases.For each case ,there are two numbers n and m (0 < n,m < 75)indicate the width and height of the rectangle.Iuput ends of EOF.Output
For each case,you should draw a rectangle with the width and height giving in the input.
after each case, you should a blank line.Sample Input
3 2Sample Output
+---+ | | | | +---+
好久不写的图形题,把第一行和最后一行的输出后,中间的用数组或直接输出都行。
第一次直接输出结果没过,我还以为是"|"符号错了,后来发现题目最后一句after each case, you should a blank line.
英语渣渣表示心累,,,
#include<stdio.h> int main() { int n,m; while( ~scanf("%d%d",&n,&m) ) { char s[100][100]; for(int i=0;i<m;i++) { s[i][0]='|'; s[i][n+1]='|'; for(int j=0;j<n;j++) s[i][j+1]=' '; } printf("+"); for(int i=0;i<n;i++) printf("-"); printf("+\n"); for(int i=0;i<m;i++) { for(int j=0;j<n+2;j++) printf("%c",s[i][j]); printf("\n"); } printf("+"); for(int i=0;i<n;i++) printf("-"); printf("+\n"); printf("\n"); } return 0; }
Description
读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的仍然按照ZOJ的顺序输出。Input
题目包含多组用例,每组用例占一行,包含ZOJ三个字符,当输入“E”时表示输入结束。
1<=length<=100。Output
对于每组输入,请输出一行,表示按照要求处理后的字符串。
具体可见样例。Sample Input
ZZOOOJJJ ZZZZOOOOOJJJ ZOOOJJ ESample Output
ZOJZOJOJ ZOJZOJZOJZOO ZOJOJO
这道题看完感觉挺简单,但就是纠结“当输入“E”时表示输入结束”,好在最后顺利写出。
#include<stdio.h> #include<string.h> int main() { char s[150]; while(~scanf("%s",s)) { getchar(); if(s[0]=='E') break; int l=strlen(s); int Z=0,O=0,J=0; for(int i=0;i<l;i++) { if(s[i]=='Z') Z++; if(s[i]=='O') O++; if(s[i]=='J') J++; } for(;Z>0||O>0||J>0;Z--,O--,J--) { if(Z>0) printf("Z"); if(O>0) printf("O"); if(J>0) printf("J"); } printf("\n"); } return 0; }
Description
Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。Input
一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。Output
T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。Sample Input
1 1988-03-07Sample Output
6574
这道题是今天见的第一个坎,太繁琐,最不擅长分情况,最后看这道题A了挺多人,耐着性子在纸上写。
先考虑这个人没有18岁生日的情况。显然只有可能是2月29日出生的,而且出生后的第18年一定不是闰年(18不是4的倍数)。因此,2月29日出生的人没有18岁生日,输出-1。
再考虑不是2月29日出生的情况,当年生日到第二年生日所经过的天数,不是365天,就是366天。之所以有时候会经过366天,是因为闰年的2月多出了一天。
如果此人生日是在3月份及以后,那么如果第二年是闰年,他会经过366天到第二年生日(因为经过了第二年2月29日),否则就是经过365天;如果此人生日在3月份之前,那么如果当前年是闰年,到第二年生日,就会经过366天(因为经过了当前年的2月29日),否则经过365天。
于是,再此人生日不是2月29日的前提下,先判断此人生日的月份是在3月之前,还是在3月之后,生日月份在3月前,则当前年的天数,就是到第二年生日经过的天数。生日月份在3月后,则后一年的天数,就是到第二年生日经过的天数。(转载,怪我思路不清晰)
#include<stdio.h> int main() { int T,i,nian,yue,ri; scanf("%d",&T); while(T--) { int sum=0,flag=0; scanf("%d-%d-%d",&nian,&yue,&ri); if( (nian%400==0||(nian%4==0&&nian%100!=0) ) ) { if(yue==2&&ri==29) {printf("-1\n");continue;} } sum=365*18; for(i=nian+1;i<nian+18;i++) if(i%400==0||(i%4==0&&i%100!=0)) sum+=1; if(nian%400==0||(nian%4==0&&nian%100!=0)) { if(yue==1||(yue==2&&ri<29)) sum+=1; } if((nian+18)%400==0||((nian+18)%4==0&&(nian+18)%100!=0)) { if(yue>=3) sum+=1; } printf("%d\n",sum); } return 0; }
Description
统计每个元音字母在字符串中出现的次数。Input
输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串。Output
对于每个测试实例输出5行,格式如下:
a:num1
e:num2
i:num3
o:num4
u:num5
多个测试实例之间由一个空行隔开。
请特别注意:最后一块输出后面没有空行:)Sample Input
2 aeiou my name is ignatiusSample Output
a:1 e:1 i:1 o:1 u:1 a:2 e:1 i:3 o:0 u:1这道题不难,但却被坑了一下,最开始用scanf输入不知道为啥第二组样例全是0
百思不得其解后就跳过去了,后来用gets() A过,哎~低级错误一堆,,
#include<stdio.h> #include<string.h> int main() { int T; char s[100+50]; scanf("%d",&T); getchar(); while(T--) { gets(s); //scanf("%s",s); //getchar(); int l=strlen(s); char c; int a=0,e=0,i=0,o=0,u=0; for(int j=0;(c=s[j])!='\0';j++) { if(s[j]=='a') a++; if(s[j]=='e') e++; if(s[j]=='i') i++; if(s[j]=='o') o++; if(s[j]=='u') u++; } printf("a:%d\n",a); printf("e:%d\n",e); printf("i:%d\n",i); printf("o:%d\n",o); if(T>=1) printf("u:%d\n\n",u); else printf("u:%d\n",u); } return 0; }
Description
WhereIsHeroFrom: Zty, what are you doing ?
Zty: I want to calculate N!......
WhereIsHeroFrom: So easy! How big N is ?
Zty: 1 <=N <=1000000000000000000000000000000000000000000000…
WhereIsHeroFrom: Oh! You must be crazy! Are you Fa Shao?
Zty: No. I haven's finished my saying. I just said I want to calculate N! mod 2009
Hint : 0! = 1, N! = N*(N-1)!Input
Each line will contain one integer N(0 <= N<=10^9). Process to end of file.Output
For each case, output N! mod 2009Sample Input
4 5Sample Output
24 120第一感觉同余定理(老师刚讲过,,,),每次碰见大数据就心里没底,发虚的写了个后测试时发现好多数结果都是0
第一次代码:
#include<cstdio> #define MOD 2009 int main() { long long N; while( ~scanf("%lld",&N) ) { int ans=1; for(int i=1;i<=N;i++) { ans=(ans%MOD*i%MOD)%MOD; } printf("%d\n",ans); } return 0; }
以为错了一直不敢提交,后来抱着试试看的心态提交后结果是超时,后来终于发现规律,2009=7*7*41;
所以41后面的都是0,,,心累。
#include<cstdio> #define MOD 2009 int main() { long long N; while( ~scanf("%lld",&N) ) { int ans=1; if(N<49) { for(int i=1;i<=N;i++) { ans=(ans%MOD*i%MOD)%MOD; } printf("%d\n",ans); } else printf("0\n"); } return 0; }
Description
输入一个十进制数N,将它转换成R进制数输出。Input
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。Output
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。Sample Input
7 2 23 12 -4 3Sample Output
111 1B -11以前做过类似的题,轻松过,代码可能有点麻烦,原谅我菜,,,,
#include<stdio.h> int main() { int N,R; while( ~scanf("%d%d",&N,&R) ) { int a[20],c=0,flag=0; if(N<0) { N=-N; flag=1; } while(N!=0) { a[c++]=N%R; N=N/R; } if(flag==1) printf("-"); for(c--;c>=0;c--) { if(a[c]==10) printf("A"); else if(a[c]==11) printf("B"); else if(a[c]==12) printf("C"); else if(a[c]==13) printf("D"); else if(a[c]==14) printf("E"); else if(a[c]==15) printf("F"); else if(a[c]==16) printf("G"); else printf("%d",a[c]); } printf("\n"); } }
Description
有二个整数,它们加起来等于某个整数,乘起来又等于另一个整数,它们到底是真还是假,也就是这种整数到底存不存在,实在有点吃不准,你能快速回答吗?看来只能通过编程。
例如:
x + y = 9,x * y = 15 ? 找不到这样的整数x和y
1+4=5,1*4=4,所以,加起来等于5,乘起来等于4的二个整数为1和4
7+(-8)=-1,7*(-8)=-56,所以,加起来等于-1,乘起来等于-56的二个整数为7和-8Input
输入数据为成对出现的整数n,m(-10000<n,m<10000),它们分别表示整数的和与积,如果两者都为0,则输入结束。Output
只需要对于每个n和m,输出“Yes”或者“No”,明确有还是没有这种整数就行了。Sample Input
9 15 5 4 1 -56 0 0Sample Output
No Yes Yes比赛时没写出来,刚开始以为用解方程,结束后发现可以暴力枚举,哎~眼拙
#include<stdio.h> int main() { int i,flag; int n,m; while( ~scanf("%d%d",&n,&m),n+m ) { flag=0; for(i=-9999;i<=9999;i++) { if(i*(n-i)==m) { flag=1; break; } } if(flag==1) printf("Yes\n"); else printf("No\n"); } return 0; }
Description
你知道ISBN号码吗?
国际标准书号(International Standard Book Number),简称ISBN,是专门为识别图书等文献而设计的国际编号。
图书馆要采购图书,所以需要调查同学们都喜欢读哪些书。经过一番调查,图书馆收集到了许多同学们喜爱图书的信息。因此,现在需要进行数据处理。
给出调查得到同学们喜爱的图书编号,请从大到小输出这些编号。需要注意的是,每个编号只需要保留一个。
Input
第一行为一个正整数n,代表调查得到了n个编号。
面一行为n个以一个空格隔开的正整数,代表图书的编号。
0<n<100
Output
每种编号只保留一个,并从大到小输出,两个数字之间以一个空格隔开。
Sample Input
5 123 456 123 456 741Sample Output
741 456 123Hint
注意不要输出多余空格!
这道题做到最后没时间啦,没写完,下来给写完啦,早知道先写这道啦
排序并去重
#include<stdio.h> #include<algorithm> using namespace std; bool cmp(int a,int b) { return a>b; } int main() { int a[150],b[150]; int T; scanf("%d",&T); for(int i=0;i<T;i++) scanf("%d",&a[i]); sort(a,a+T,cmp); int index=1; b[0]=a[0]; for(int i=1;i<T;i++) { if(a[i]!=a[i-1]) { b[index++]=a[i]; } } for(int i=0;i<index-1;i++) printf("%d ",b[i]); printf("%d\n",b[index-1]); return 0; }
Description
小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识。
问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为“美素数”,如29,本身是素数,而且2+9 = 11也是素数,所以它是美素数。
给定一个区间,你能计算出这个区间内有多少个美素数吗?Input
第一行输入一个正整数T,表示总共有T组数据(T <= 10000)。
接下来共T行,每行输入两个整数L,R(1<= L <= R <= 1000000),表示区间的左值和右值。Output
对于每组数据,先输出Case数,然后输出区间内美素数的个数(包括端点值L,R)。
每组数据占一行,具体输出格式参见样例。Sample Input
3 1 100 2 2 3 19Sample Output
Case #1: 14 Case #2: 1 Case #3: 4没想到会把刚做的题又拿出来,结果还是悲剧,第一次素数筛选时竟然变量用错,瞬间又心慌,,
#include<stdio.h> int a[1000010]={1,1},b[1000010]={0}; int f(int a) { int sum=0; while(a!=0) { sum+=a%10; a/=10; } return sum; } int main() { for(int i=2;i<1000010;i++) { if(a[i]==1) continue; for(int j=i*2;j<1000010;j+=i) a[j]=1; } for(int i=2;i<1000010;i++) { if(a[i]==0&&a[f(i)]==0) b[i]=b[i-1]+1; else b[i]=b[i-1]; } int T,L,R,count=1; scanf("%d",&T); while(T--) { scanf("%d%d",&L,&R); printf("Case #%d: %d\n",count++,b[R]-b[L-1]); } }
还有两道题没来得及看,以后再补上,,,(我的第一篇博客)