浙江大学10年计算机上机题(含答案)(DOC)

浙江大学10年计算机上机题(含答案)(DOC)
浙江大学10年计算机上机题(含答案)(DOC)

一、A+B

题目描述:

给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。

现在请计算A+B的结果,并以正常形式输出。

输入:

输入包含多组数据数据,每组数据占一行,由两个整数A和B组成(-10^9 < A,B < 10^9)。

输出:

请计算A+B的结果,并以正常形式输出,每组数据占一行。

样例输入:

-234,567,890 123,456,789

1,234 2,345,678

样例输出:

-111111101

2346912

答案:

给大家记住数据吧,如果你是用高进度计算的。

注意:你的结果是否有前缀0;0是否带负号;

999 1

10,000 -9

0 0

-0 -0

0 -0

1999 10

10,001 -10,000

#include

#include

#include

#include

using namespace std;

int main()

{

string strA,strB;

while(cin>>strA>>strB)

{

long numA = 0;

for(int i=0; i<=strA.length()-1; i++)

{

if(strA[i] <= '9' && strA[i] >= '0')

{

numA = numA*10 + strA[i] - '0';

}

}

long numB = 0;

for(int//去掉否则出现变量重复i=0; i<=strB.length()-1; i++) {

if(strB[i] <= '9' && strB[i] >= '0')

{

numB = numB*10 + strB[i] - '0';

}

}

if(strA[0] != '-' && strB[0] != '-')//++

cout<

if(strA[0] != '-' && strB[0] == '-')//+-

cout<

if(strA[0] == '-' && strB[0] != '-')//-+

cout<

if(strA[0] == '-' && strB[0] == '-')//--

cout<<0-(numA+numB)<

}

return 0;

}

已AC

1.//可以用sscanf把字符串转换为int,然后直接加就可以了

2.#include

3.#include

4.#include

5.

https://www.360docs.net/doc/bb16278462.html,ing namespace std;

7.

8.const int Maxn = 50;

9.int main()

10.{

11. char str1[Maxn],str2[Maxn];

12. char temp[Maxn];

13. int a,b,i,r;

14. while(scanf("%s%s",str1,str2)!=EOF)

15. {

16. int len = strlen(str1);

17. memset(temp,0,sizeof(temp));

18. r = 0;

19. for(i = 0; i

20. if(str1[i]!=',')temp[r++] = str1[i];

21. sscanf(temp,"%d",&a);

22. memset(temp,0,sizeof(temp));

23. r = 0;

24. for(i = 0; i

25. if(str2[i]!=',')temp[r++] = str2[i];

26. sscanf(temp,"%d",&b);

27. cout<

28. }

29. return 0;

30.

31.}

1.#include

2.#include

3.int sw(char *a){

4. int i=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. return c;

13.}

14.int main(){

15. char a[99],b[99];

16. int a1,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(int j=0;j

24. printf("%d\n",c[j]);

25. return 0;

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”,否则请输出

“Wrong Answer”。

样例输入:

zoj

ozojo

ozoojoo

oozoojoooo

zooj

ozojo

oooozojo

zojoooo

样例输出:

Accepted

Accepted

Accepted

Accepted

Accepted

Accepted

Wrong Answer

Wrong Answer

答案:

下面代码AC过了,需要考虑的问题很多,需要注意的地方我都加注释了

1.#include

2.#include

3.#include

https://www.360docs.net/doc/bb16278462.html,ing namespace std;

5.int main(){

6. string ins;

7. while(cin>>ins){

8. size_t len = ins.size()-1;

9. size_t bz = ins.find_first_of("z");

10. size_t bj = ins.find_first_of("j");

11.

12. if(bz==string::npos||bj==string::npos){//没有z,j一定错

13. cout<<"Wrong Answer"<

14. continue;

15. }

16.

17. bool flag=true;

18. for(int i=bz+1;i<=len;i++){

19. if(ins.at(i)=='z')

20. flag = false;

21. }

22. for(int i=bj+1;i<=len;i++){

23. if(ins.at(i)=='j')

24. flag = false;

25. }

26. if(flag==false){ //只能出现一个z,一个j

27. cout<<"Wrong Answer"<

28. continue;

29. }

30. if(bj

31. cout<<"Wrong Answer"<

32. continue;

33. }

34.

35.

36. /*z前o个数为e1,zj之间o个数为e2,j之后o个数为e3*/

37. size_t e1 = bz;

38. size_t e2 = bj-bz-1;

39. if(e2==0){ //z,j之间o的个数至少一个

40. cout<<"Wrong Answer"<

41. continue;

42. }

43. size_t e3 = len-bj;

44. int x = e2;

45. if(e1*x==e3) cout<<"Accepted"<

出e1*e2==e3

46. else cout<<"Wrong Answer"<

47. }

48. return 0;

49.}

用C++ string类进行判别可以写出非常简介的算法

1.#include

2.#include

3.#include

https://www.360docs.net/doc/bb16278462.html,ing namespace std;

5.int main(int argc, char **argv)

6.{

7. ifstream cin("input.txt");

8. string s;

9. while(cin>>s)

10. {

11. size_t p,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<<"Wrong Answer\n";

25. }

26.}

最简洁的:

#include

#include

int main(){

char str[1000];

int x=0,y=0,z=0;

int length,i;

while(gets(str)!=NULL){

length=strlen(str);

for(i=0;i

if(str[i]=='z'){

x=i;

}

else if(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("Wrong Answer\n");

}

}

}

另:

相关主题
相关文档
最新文档