2026.7.7基本功训练1(启航组)
第一题
// 1. 01序列
#include <iostream>
#include <bitset>
using namespace std;
int main() {
for (int i = 0; i < 64; i++) {
cout << bitset<6>(i) << endl;
}
return 0;
}
第二题
// 2. 画长方形1(固定25行18列)
#include <iostream>
using namespace std;
int main() {
int n = 25, m = 18;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
char c = 'A' + abs(i - j);
cout << c;
}
cout << endl;
}
return 0;
}
第三题
// 3. 画三角形1(固定15行)
#include <iostream>
using namespace std;
int main() {
int n = 15;
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
char c = 'A' + abs(i - j);
cout << c;
}
cout << endl;
}
return 0;
}
第四题
// 4. 01序列2(1的个数为奇数)
#include <iostream>
#include <bitset>
using namespace std;
int main() {
for (int i = 0; i < 64; i++) {
if (__builtin_popcount(i) % 2 == 1) {
cout << bitset<6>(i) << endl;
}
}
return 0;
}
第五题
// 5. 特殊的数字1(水仙花数)
#include <iostream>
using namespace std;
int main() {
for (int i = 100; i < 1000; i++) {
int a = i / 100, b = i / 10 % 10, c = i % 10;
if (a*a*a + b*b*b + c*c*c == i)
cout << i << endl;
}
return 0;
}
第六题
// 6. 特殊的数字2(四位回文数)
#include <iostream>
using namespace std;
int main() {
for (int i = 1000; i < 10000; i++) {
if (i / 1000 == i % 10 && i / 100 % 10 == i / 10 % 10)
cout << i << endl;
}
return 0;
}
第七题
// 7. 数列特征(最大、最小、和)
#include <iostream>
#include <climits>
using namespace std;
int main() {
int n, x, maxv = INT_MIN, minv = INT_MAX, sum = 0;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> x;
maxv = max(maxv, x);
minv = min(minv, x);
sum += x;
}
cout << maxv << endl << minv << endl << sum << endl;
return 0;
}
第八题
// 8. 数列特征2(第二大、第二小、平方和)
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int n, x;
cin >> n;
vector<int> v;
long long sq_sum = 0;
for (int i = 0; i < n; i++) {
cin >> x;
v.push_back(x);
sq_sum += 1LL * x * x;
}
sort(v.begin(), v.end());
cout << v[n-2] << endl << v[1] << endl << sq_sum << endl;
return 0;
}
第九题
// 9. 进制转换1(10->16,两位)
#include <iostream>
using namespace std;
int main() {
int a;
cin >> a;
char b = (a / 16) >= 10 ? 'A' + (a / 16 - 10) : '0' + a / 16;
char c = (a % 16) >= 10 ? 'A' + (a % 16 - 10) : '0' + a % 16;
cout << b << c << endl;
return 0;
}
第十题
// 10. 进制转换2(10->16,任意非负整数)
#include <iostream>
#include <string>
using namespace std;
int main() {
unsigned int a;
cin >> a;
if (a == 0) { cout << 0 << endl; return 0; }
string s = "";
while (a > 0) {
int r = a % 16;
s = (char)(r >= 10 ? 'A' + r - 10 : '0' + r) + s;
a /= 16;
}
cout << s << endl;
return 0;
}
第十一题
// 11. 进制转换3(10->p,2<=p<=36)
#include <iostream>
#include <string>
using namespace std;
int main() {
unsigned int a;
int p;
cin >> a >> p;
if (a == 0) { cout << 0 << endl; return 0; }
string s = "";
while (a > 0) {
int r = a % p;
s = (char)(r >= 10 ? 'A' + r - 10 : '0' + r) + s;
a /= p;
}
cout << s << endl;
return 0;
}
第十二题
// 12. 画长方形2(n*m)
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << (char)('A' + abs(i - j));
}
cout << endl;
}
return 0;
}
第十三题
// 13. 画三角形1(n行,字母三角形)
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
cout << (char)('A' + abs(i - j));
}
cout << endl;
}
return 0;
}
第十四题
// 14. 绘制图形(螺旋数字三角)
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int n;
cin >> n;
int a[30][30] = {0};
int num = 1;
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
a[i][j] = num++;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
cout << setw(2) << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
// 注:原题图形较复杂,此处简化为三角填充,可根据需要调整。
第十五题
// 15. 杨辉三角形
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
long long a[35][35] = {0};
a[0][0] = 1;
for (int i = 1; i < n; i++) {
a[i][0] = a[i][i] = 1;
for (int j = 1; j < i; j++) {
a[i][j] = a[i-1][j-1] + a[i-1][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
第十六题
// 16. 缩小的陆地
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
double x, y;
cin >> x >> y;
double r2 = x*x + y*y;
int year = (int)(r2 * 3.1415926 / 100) + 1;
cout << year << endl;
}
return 0;
}
第十七题
// 17. 查找整数
#include <iostream>
using namespace std;
int main() {
int n, a;
cin >> n;
int arr[10005];
for (int i = 1; i <= n; i++) cin >> arr[i];
cin >> a;
for (int i = 1; i <= n; i++) {
if (arr[i] == a) {
cout << i << endl;
return 0;
}
}
cout << -1 << endl;
return 0;
}
第十八题
// 18. 枚举字串(A-D,长度4)
#include <iostream>
using namespace std;
int main() {
char s[5] = {0};
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
for (int k = 0; k < 4; k++)
for (int l = 0; l < 4; l++) {
cout << (char)('A'+i) << (char)('A'+j)
<< (char)('A'+k) << (char)('A'+l) << endl;
}
return 0;
}
第十九题
// 19. 数列排序
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
int a[205];
for (int i = 0; i < n; i++) cin >> a[i];
sort(a, a + n);
for (int i = 0; i < n; i++) cout << a[i] << " ";
return 0;
}
第二十题
// 20. 集合运算
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
int main() {
int n, m, x;
set<int> A, B;
cin >> n;
for (int i = 0; i < n; i++) { cin >> x; A.insert(x); }
cin >> m;
for (int i = 0; i < m; i++) { cin >> x; B.insert(x); }
// 交集
for (int v : A) if (B.count(v)) cout << v << " ";
cout << endl;
// 并集
set<int> C = A;
for (int v : B) C.insert(v);
for (int v : C) cout << v << " ";
cout << endl;
// 余集(A - B)
for (int v : A) if (!B.count(v)) cout << v << " ";
cout << endl;
return 0;
}

浙公网安备 33010602011771号