28. }
29. return0;
30.
31.}
1.#include
2.#include
3.intsw(char*a){
4. inti=0,c=0;
5. while(a[i]){
6. if(a[i]>='0'&&a[i]<='9')
7. c=c*10+a[i]-'0';
8. i++;
9. }
10. if(a[0]=='-')
11. c=-c;
12. returnc;
13.}
14.intmain(){
15. chara[99],b[99];
16. inta1,b1,c[99],i=0;
17. while(scanf("%s%s",a,b)!
=EOF){
18. a1=sw(a);
19. b1=sw(b);
20.
21. c[i]=a1+b1;
22. i++;}
23. for(intj=0;j
24. printf("%d\n",c[j]);
25. return0;
26.}
复制代码
AC了
二、ZOJ问题
题目描述:
对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC。
是否AC的规则如下:
1.zoj能AC;
2.若字符串形式为xzojx,则也能AC,其中x可以是N个'o'或者为空;
3.若azbjc能AC,则azbojac也能AC,其中a,b,c为N个'o'或者为空;
输入:
输入包含多组测试用例,每行有一个只包含'z','o','j'三种字符的字符串,字符串长度小于等于1000。
输出:
对于给定的字符串,如果能AC则请输出字符串“Accepted”,否则请输出“WrongAnswer”。
样例输入:
zoj
ozojo
ozoojoo
oozoojoooo
zooj
ozojo
oooozojo
zojoooo
样例输出:
Accepted
Accepted
Accepted
Accepted
Accepted
Accepted
WrongAnswer
WrongAnswer
答案:
下面代码AC过了,需要考虑的问题很多,需要注意的地方我都加注释了
1.#include
2.#include
3.#include
4.usingnamespacestd;
5.intmain(){
6. stringins;
7. while(cin>>ins){
8. size_tlen=ins.size()-1;
9. size_tbz=ins.find_first_of("z");
10. size_tbj=ins.find_first_of("j");
11.
12. if(bz==string:
:
npos||bj==string:
:
npos){//没有z,j一定错
13. cout<<"WrongAnswer"<14. continue;
15. }
16.
17. boolflag=true;
18. for(inti=bz+1;i<=len;i++){
19. if(ins.at(i)=='z')
20. flag=false;
21. }
22. for(inti=bj+1;i<=len;i++){
23. if(ins.at(i)=='j')
24. flag=false;
25. }
26. if(flag==false){ //只能出现一个z,一个j
27. cout<<"WrongAnswer"<28. continue;
29. }
30. if(bj31. cout<<"WrongAnswer"<32. continue;
33. }
34.
35.
36. /*z前o个数为e1,zj之间o个数为e2,j之后o个数为e3*/
37. size_te1=bz;
38. size_te2=bj-bz-1;
39. if(e2==0){ //z,j之间o的个数至少一个
40. cout<<"WrongAnswer"<41. continue;
42. }
43. size_te3=len-bj;
44. intx=e2;
45. if(e1*x==e3)cout<<"Accepted"<46. elsecout<<"WrongAnswer"<47. }
48. return0;
49.}
用C++string类进行判别可以写出非常简介的算法
1.#include
2.#include
3.#include
4.usingnamespacestd;
5.intmain(intargc,char**argv)
6.{
7. ifstreamcin("input.txt");
8. strings;
9. while(cin>>s)
10. {
11. size_tp,q;
12. p=s.find('z');
13. q=s.find('j');
14. while((int)(q-p)>2)
15. {
16. s.erase((int)(q+1),(int)p);
17. s.erase((int)(p+1),1);
18. p=s.find('z');
19. q=s.find('j');
20. }
21. if(p==(s.size()-q-1)&&(q-p)==2)
22. cout<<"Accepted\n";
23. else
24. cout<<"WrongAnswer\n";
25. }
26.}
最简洁的:
#include
#include
intmain(){
charstr[1000];
intx=0,y=0,z=0;
intlength,i;
while(gets(str)!
=NULL){
length=strlen(str);
for(i=0;i if(str[i]=='z'){
x=i;
}
elseif(str[i]=='j'){
y=i;
}
}
z=length-y-1;
y-=(x+1);
if(z==x+x*(y-1)&&y>0){
printf("Accepted\n");
}
else{
printf("WrongAnswer\n");
}
}
}
另:
考虑y>0的情况,比喻输入
zj
给出我的AC代码,用的纯C,条件二、三可合并到一个条件里
1.#include
2.#include
3.chars[1001];
4.intmain()
5.{
6. inta,b,c;
7. char*p;
8. while(scanf("%s",s)!
=EOF){
9. if(!
strcmp(s,"zoj")){printf("Accepted\n");continue;} //条件一
10.
11. a=b=c=0;
12. p=s;
13. while(*p=='o'){a++;p++;} //a为第一个z前o的个数
14. if(*p=='z'){
15. p++;
16. while(*p=='o'){b++;p++;} //b为夹在z和j之间的o的个数
17. if(*p=='j'){
18. p++;
19. while(*p=='o'){c++;p++;} //c为j之后的o的个数
20. if(!
(*p)&&b>0&&c==a*b){printf("Accepted\n");continue;} //条件三
21. }
22. }
23. printf("WrongAnswer\n");
24. }
25. return0;
26.}
三、奥运排序问题
题目描述:
按要求,给国家进行排名。
输入:
有多组数据。
第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。
第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。
接下来一行给出M个国家号。
输出:
排序有4种方式:
金牌总数奖牌总数金牌人口比例奖牌人口比例
对每个国家给出最佳排名排名方式和最终排名
格式为:
排名:
排名方式
如果有相同的最终排名,则输出排名方式最小的那种排名,对于排名方式,金牌总数<奖牌总数<金牌人口比例<奖牌人口比例
如果有并列排名的情况,即如果出现金牌总数为100,90,90,80.则排名为1,2,2,4.
每组数据后加一个空行。
样例输入:
44
481
662
482
2124
0123
42
8101
8112
8123
8134
03
样例输出:
1:
3
1:
1
2:
1
1:
2
1:
1
1:
1
答案:
1.//看中文题目都那么费力气,我草!
2.//需要特别注意的地方是,只在要求排名的国家里面排名,其他不需要排名的直接忽略。
。
。
3.//当时我没仔细看到这点,wa了N次,暴怒到想砸电脑....
4.//注意要用double,因为float精度是不够的,一般涉及到浮点的,最好都用double
5.//还有注意处理重复排名:
6.//if(P[j].God==P[j-1].God)rank[j]=rank[j-1];
7.//elserank[j]=j+1;
8.
9.#include
10.#include
11.#include
12.#include
13.
14.usingnamespacestd;
15.
16.constintMaxn=100000;
17.
18.structCon{
19. doubleGod,Pri,Peo;
20. doubleGodper,Peoper;
21. intid;
22.}P[Maxn],rp[Maxn];
23.intrank[Maxn];
24.intN,M;
25.
26.boolcmp(constCona,constConb)
27.{
28. returna.Peoper>b.Peoper;
29.}
30.
31.boolcmp1(constCona,constConb)
32.{
33. returna.Godper>b.Godper;
34.}
35.
36.boolcmp2(constCona,constConb)
37.{
38. returna.Pri>b.Pri;
39.}
40.boolcmp3(constCona,constConb)
41.{
42. returna.God>b.God;
43.}
44.
45.intmain()
46.{
47. inti,index[Maxn],j;
48. intbet,way;
49. while(scanf("%d%d",&N,&M)!
=EOF)
50. {
51. for(i=0;i52. {
53. cin>>rp[i].God>>rp[i].Pri>>rp[i].Peo;
54. rp[i].Godper=rp[i].God/rp[i].Peo;
55. rp[i].Peoper=rp[i].Pri/rp[i].Peo;
56. }
57. intr=0;
58. for(i=0;i59. {
60. cin>>index[i];
61. P[r]=rp[index[i]];
62. P[r++].id=index[i];
63. }
64.
65. for(i=0;i66. {
67. sort(P,P+M,cmp3);
68. rank[0]=1;
69. for(j=1;j70