文档库 最新最全的文档下载
当前位置:文档库 › 2013年CCF考试真题及答案

2013年CCF考试真题及答案

2013年CCF考试真题及答案
2013年CCF考试真题及答案

更多CCF真题及答案,请搜索:

https://www.wendangku.net/doc/ca16730899.html,/acpchenpeng/article/category/5965279

试题编号:201312-1

试题名称:出现次数最多的数

1.#include

2.#include

3.#include

4.#include

5.#include

6.#include

7.#include

8.

https://www.wendangku.net/doc/ca16730899.html,ing namespace std;

10.

11.int main()

12.{

13.int n,m,max;

14.int num=0;

15. cin >> n;

16. map f; //有序容器

17.

18.for(int i = 0;i < n; i++)

19. {

20. cin>>m;

21. f[m]++;

22. }

23.

24.for(map::iterator it = f.begin();it!=f.end();it++)

25. {

26.if(it->second > num)

27. {

28. num = it->second;

29. max = it->first;

30. }

31. }

32.

33. cout << max;

34.

35.return 0;

36.

37.}

201312-2

试题名称:ISBN号码

[cpp]view plaincopy

1.#include

2.#include

3.#include

4.#include

5.#include

6.

https://www.wendangku.net/doc/ca16730899.html,ing namespace std;

8.

9.int main()

10.{

11. string s;

12. cin >> s;

13.int a[10]={0};

14.int sum =0;

15.int j =0;

16.for(string::iterator i = s.begin() ;i != s.end(); i++)

17. {

18.

19.if(*i != '-')

20. {

21. a[j] = *i - '0';

22.if(j < 9)

23. sum += a[j] * (j+1);

24. j++;

25. }

26. }

27.

28.

29.if(sum % 11 == a[9] ||(sum % 11 == 10 && s[12] == 'X'))

30. cout << "Right" << endl;

31.

32.else

33. {

34.if(sum % 11 == 10)

35. s[12] = 'X';

36.else

37. s[12] = sum % 11 + '0'; //不要忘记+‘0’

38. cout << s << endl;

39.

40. }

41.

42.return 0;

43.}

试题编号: 3

试题名称:最大的矩形

[cpp]view plaincopy

1.#include

2.#include

3.#include

4.#include

5.#include

6.

https://www.wendangku.net/doc/ca16730899.html,ing namespace std;

8.

9.int main()

10.{

11.int n,m;

12. cin >> n;

13.

14. vector v;

15.for(int i =0; i< n;i++)

16. {

17. cin >> m;

18. v.push_back(m);

19. }

20.

21.int s_max=0; //全局变量,用于保存最大的面积

22.

23.for(int i=0;i

24. {

25.int h_min = v[i]; //保存最小高

26.

27.for(int j=i;j

28. {

29.if(v[j] < h_min)

30. h_min = v[j]; //更新最小高,注意是v[j],不是j

31.int s = h_min * (j-i+1); //计算当前面积

32.if( s > s_max)

33. s_max = s; //更新最大面积

34. }

35. }

36. cout << s_max <

37.

38.return 0;

39.}

试题编号:201312-4

试题名称:有趣的数

#include

#include

#include

#include

#include

#include

#include

using namespace std;

long long f[2000][3][2]; // f[seq_k to place][0: to place 0 , 1: ethier 0 or 1, 2 : must be 1][3 is placed ?

1 : 0]

int dp(int n, int p1, int p3)

{

long long &now = f[n][p1][p3];

if (now != -1)

return now;

if (n == 0)

{

if (p1 == 2 && p3 == 1)

{

now = 1;

}else

{

now = 0;

}

return now;

}

now = 0;

if (p1 == 0)

{

now += dp(n-1, 1, p3); // go 0

}else if (p1 == 1)

{

now += dp(n-1, 1, p3); // go 0 now += dp(n-1, 2, p3); // go 1 }else // p1 == 2

{

now += dp(n-1, 2, p3); // go 1

}

if (p3 == 0)

{

now += dp(n-1, p1, p3); // go 2;

now += dp(n-1, p1, 1); // go 3;

}else

{

now += dp(n-1, p1, 1); // go 3;

}

now %= 1000000007;

}

int main()

{

int n;

cin >> n;

memset(f, -1, sizeof(f));

int ans = dp(n - 1, 0, 0); // seq[n] is 2

cout << ans << endl;

return 0;

}

试题编号:201312-5

试题名称:I’m stuck!

#include

#include

#include

#include

#include

#include

using namespace std;

//

class Move

{ public:

virtual bool CanMove(char from, char to, int dx, int dy) = 0; };

class ForwardMove : public Move

{

public:

virtual bool CanMove(char from, char to, int dx, int dy) {

if (to == '#') return false;

switch (from)

{

case '+' : case 'S' : case 'T' : return true; break;

case '-' : return dy != 0; break;

case '|' : return dx != 0; break;

case '.' : return dx == 1; break;

}

return false;

}

};

class BackwardMove : public Move

{

public:

virtual bool CanMove(char from, char to, int dx, int dy) {

if (to == '#') return false;

switch (to)

{

case '+' : case 'S' : case 'T' : return true; break;

case '-' : return dy != 0; break;

case '|' : return dx != 0; break;

case '.' : return dx == -1; break;

}

return false;

};

char s[100][100];

typedef bool ARR[100][100];

ARR bs, bt;

int sx, sy, tx, ty;

int d[4][2] = {{-1, 0},{1, 0},{0, 1},{0, -1}};

void Bfs(ARR b, Move *move, int x, int y)

{

if (b[x][y])

return;

b[x][y] = true;

for (int o = 0; o < 4; o++)

{

int dx = d[o][0];

int dy = d[o][1];

int xx = x + dx;

int yy = y + dy;

if (move->CanMove(s[x][y], s[xx][yy], dx, dy)) {

Bfs(b, move, xx, yy);

}

}

}

int n, m;

int main()

{

cin >> n >> m;

for (int i = 0; i <= n + 1; i++)

for (int j = 0; j <= m + 1; j++)

s[i][j] = '#';

for (int i = 1; i <= n; i++)

cin >> s[i]+1;

for (int i = 0; i <= n + 1; i++)

s[i][m + 1] = '#';

for (int i = 0; i <= n + 1; i++)

{

for (int j = 0; j <= m + 1; j++)

{

if (s[i][j] == 'S')

{

sx = i; sy = j;

}

if (s[i][j] == 'T')

{

tx = i;

ty = j;

}

}

}

Bfs(bs, new ForwardMove(), sx, sy); Bfs(bt, new BackwardMove(), tx, ty);

int ans = 0;

for (int i = 0; i <= n + 1; i++)

{

for (int j = 0; j <= m + 1; j++)

{

if (bs[i][j] && ! bt[i][j])

ans ++;

}

}

if (bs[tx][ty] == false)

cout << "I'm stuck!" << endl;

else

cout << ans << endl;

return 0;

}

相关文档