三、完善程序(单选题,每题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年学而思