a--4:2023 CPS-J 模拟卷--第二部分

时间:2024-07-25 14:28:08 分类:普及组CSP-J模拟题

三、完善程序(单选题,每题3分,共计30分)

程序一

(水仙花数)输入一个正整数n(1≤n≤10⁹),  输出不超过 n 的所有水仙花数,并按照格式输出每个水仙花数展开的等式,每行一个。

若三位数 ABC 满足ABC=A³+B³+C³,   则称 ABC 为水仙花数,例如153=1³+5³+33,所以153 是水仙花数,程序需要按照“153=1³+5³+33”的格式,对从高到低的各位1、5、3依次输出。 试补全程序。


01 #include <iostream>

02 #include <cmath>

03 using namespace std;

04 int Cube(int x) {

05     return ①;

06 }

07 int main() {

08     int n;

09     cin >> n;

10     for (int i = ②; i <= n && i <= 999; ++i) {

11         int a = ③;

12         int b = i / 10 % 10;

13         int c = ④;

14         if (i == Cube(a) + Cube(b) + Cube(c)) {

15             cout << i << "=" << a << ⑤;

16         }

17     }

18     return 0;

19 }


33. (3分)①处应填( )。

A.x^3                          B.pow(3,x)                           C.Cube(x-1)*x                        D.x*x*x

34. (3分)②处应填( )。

A.1                              B.100                                     C.sqrt(n)                                   D.0

35. (3分)③处应填( )。

A.i%100                     B.i/(100%10)                        C.i/100                                      D.i%10

36. (3分)④处应填( )。

A.i-i/100*100-i/10*10                                                          B.i/10

C.i/100 %10                                                                           D.i%10

37. (3分)⑤处应填( )。

A. <<b<<"^3+"<<c<<"^3"<<endl

B. "^3+"<<b<<"^3+"<<c<<"^3+"<<endl

C.  "^3+"<< b <<"^3+"<< c <<"^3\n"

D. "^3+"<<b<<"^3+"<<c<<  endl





程序二

(数独)现有一个 9*9大小的二维数组,其中非0的数字表示该位置已填写的数,为0的数字 表示该位置尚未填写。现在要在所有为0的位置中填写数字,使得满足以下条件,若解存在,只 需找到满足条件的一组解即可:

每行1~9 恰好各出现一次。

每列1~9恰好各出现一次。

将二维数组按“井”字形均等划分为9个九宫格(称之为“宫”),每个宫中 1~9 恰好各出现 一次。试补全程序。


01 #include <iostream>

02 using namespace std;

03

04 const int MAXN = 9;

05

06 bool row_state[MAXN][10];

07 bool col_state[MAXN][10];

08 bool square_state[MAXN][10];

09

10 int square_id(int r, int c) {

11     return ①;

12 }

13

14 void change_state(int sudoku[MAXN][MAXN], int r, int c) {

15     int value = sudoku[r][c];

16     row_state[r][value] ^= 1;

17     col_state[c][value] ^= 1;

18     square_state[square_id(r, c)][value] ^= 1;

19 }

20

21 bool fill(int sudoku[MAXN][MAXN], int r, int c) {

22     if (r >= MAXN)

23         return true;

24

25     ②;

26     if (c == MAXN - 1) {

27         next_r = r + 1;

28         next_c = 0;

29     }

30

31     if (sudoku[r][c])

32         ③;

33

34     for (int num = 1; num <= 9; ++num) {

35         if (④)

36             continue;

37         sudoku[r][c] = num;

38         change_state(sudoku, r, c);

39         if (fill(sudoku, next_r, next_c))

40             return true;

41         change_state(sudoku, r, c);

42         ⑤;

43     }

44

45     return false;

46 };

47

48 int main() {

49     int sudoku[MAXN][MAXN] = {{2, 0, 0, 0, 8, 0, 3, 0, 0},

50         {0, 6, 0, 0, 7, 0, 0, 8, 4},

51         {0, 3, 0, 5, 0, 0, 2, 0, 9},

52         {0, 0, 0, 1, 0, 5, 4, 0, 8}

53         {0, 0, 0, 0, 0, 0, 0, 0, 0},

54         {4, 0, 2, 7, 0, 6, 0, 0, 0},

55         {3, 0, 1, 0, 0, 7, 0, 4, 0},

56         {7, 2, 0, 0, 4, 0, 0, 6, 0},

57         {0, 0, 4, 0, 1, 0, 0, 0, 3}};

58

59     for (int i = 0; i < MAXN; ++i)

60         for (int j = 0; j < MAXN; ++j) {

61             if (!sudoku[i][j])

62                 continue;

63             change_state(sudoku, i, j);

64         }

65

66     if (!fill(sudoku, 0, 0)) {

67         cout << "No Solution!" << endl;

68         return 0;

69     }

70

71     for (inti = 0; i < MAXN; ++i) {

72         for (int j = 0; j < MAXN; ++j)

73             cout << sudoku[i][j] << ' ';

74         cout << endl;

75     }

76

77     //输出:

78     //2 4 5 9 8 1 3 7 6

79     //1 6 9 2 7 3 5 8 4

80     //8 3 7 5 6 4 2 1 9

81     //9 7 6 1 2 5 4 3 8

82     //5 1 3 4 9 8 6 2 7

83     //4 8 2 7 3 6 9 5 1

84     //3 9 1 6 5 7 8 4 2

85     //7 2 8 3 4 9 1 6 5

86     //6 5 4 8 1 2 7 9 3

87

88     return 0;

89 }


38.  ( 3 分 ) ① 处 应 填 ( ) 。

A.(r-1)/3*3+c/3+1                                                              B.r/3*3+c/3

C.r/3*3+c%3                                                                       D.r%3+c/3

39. (3分)②处应填( )。

A.int   next_r=r,next_c  =c                             B.int     next_r =r+1,next_c =c

C.int  next_r =r,next_c  =c+1                       D.int  next_r  =r+1,next_c  =c+1

40. (3分)③处应填( )。

A.fill(sudoku,r,c)                                             B.fill(sudoku,next_r,next_c)

C.return  fill(sudoku,r,c)                               D.return fil(sudoku,next_r,next_c)

41. (3分)④处应填( )。

A.row_state[r][num]||col_state[c][num]||square_state[square_id(r,c)][num]

B.!row_state[r][num]&&!col_state[c][num]&&!square_state[square_id(r,c)][num] C.row_state[r][c]&&col_state[r][c]&&square_state[r][c]

D.!row_state[r][c]||!col_state[r][c]||!square_state[r][c]

42. (3分)⑤处应填( )。

A.sudoku[r][c]^=1

B.sudoku[r][c]=0

C.row_state[r][num]=col_state[c][num]=square_state[square_id(r,c)][num]=false D.row_state[r][num]=col_state[c][num]=square_state[square_id(r,c)][num]=true

答案:----->E:\csp\初赛集训模拟题试题包\23年学而思