#include <iostream> using namespace std; int main() { int n; cin >> n; if (n % 2 == 1) { int sum = 0; for (int i = 2; i < n; i += 2) { sum += i; } cout << sum << endl; } else { int sum = 0; for (int i = 1; i <= n; i++) { if (n % i == 0) { sum += i; } } cout << sum << endl; } return 0; }
代码功能分析 这段代码的主要功能是根据用户输入的整数 `n` 的奇偶性执行不同的操作: - 如果 `n` 是奇数,计算从 2 到 `n-1` 之间所有偶数的和并输出。 - 如果 `n` 是偶数,计算 `n` 的所有正因数(包括 1 和 `n` 本身)的和并输出。 代码优化建议 1. 减少重复代码:在奇数和偶数的处理逻辑中,都定义了 `sum` 变量,可以将其定义提前到 `if-else` 语句之前,避免重复定义。 2. 提高代码可读性:可以将计算偶数和与计算因数和的逻辑封装成独立的函数,使 `main` 函数更加简洁。 优化后的代码 ```cpp #include <iostream> using namespace std; // 计算从 2 到 n-1 之间所有偶数的和 int sumOfEvenNumbers(int n) { int sum = 0; for (int i = 2; i < n; i += 2) { sum += i; } return sum; } // 计算 n 的所有正因数的和 int sumOfDivisors(int n) { int sum = 0; for (int i = 1; i <= n; i++) { if (n % i == 0) { sum += i; } } return sum; } int main() { int n; cin >> n; int sum; if (n % 2 == 1) { sum = sumOfEvenNumbers(n); } else { sum = sumOfDivisors(n); } cout << sum << endl; return 0; } ``` 代码解释 1. `sumOfEvenNumbers` 函数:该函数接受一个整数 `n` 作为参数,计算从 2 到 `n-1` 之间所有偶数的和,并返回结果。 2. `sumOfDivisors` 函数:该函数接受一个整数 `n` 作为参数,计算 `n` 的所有正因数的和,并返回结果。 3. `main` 函数:读取用户输入的整数 `n`,根据 `n` 的奇偶性调用不同的函数计算结果,并输出结果。 需要小心的地方 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 当输入的 `n` 非常大时,计算因数和的时间复杂度为 $O(n)$,可能会导致性能问题,可以考虑使用更高效的算法。 2. 在处理用户输入时,需要考虑输入的合法性,例如输入是否为有效整数。 3. 代码中使用了 `using namespace std;`,在大型项目中可能会导致命名冲突,建议尽量避免使用,可以使用 `std::` 前缀来指定命名空间。 [2025-11-26 18:57:01 | AI写代码神器 | 688点数解答]
- [字节豆包] #include <iostream> using namespace std; int main() { int n; cin >> n; if (n % 2 == 1) { int sum = 0; for (int i = 2; i < n; i += 2) { sum += i; } cout << sum << endl; } else { int sum = 0; for (int i = 1; i <= n; i++) { if (n % i == 0) { sum += i; } } cout << sum << endl; } return 0; }(688点数解答 | 2025-11-26 18:57:01)36
- [字节豆包] ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; // 输入年龄 if (n >= 0 && n <= 3) { cout << "infant" << endl; } else if (n >= 4 && n <= 12) { cout << "child" << endl; } else if (n >= 13 && n <= 18) { cout << "youngster" << endl; } else if (n >= 19 && n <= 25) { cout << "youth" << endl; } return 0; }(780点数解答 | 2026-01-29 16:57:33)6
- [讯飞星火] 快速排序:# include< iostream>using namespace std;# include< stdlib. h># include< time. h>const int n =10;const int min= 10;const int max=99;int getrand( int min, int max){return ( rand()%( max-min+1)+ min);}void set( int r[], int n){int i;for(i=0;i<n;i++)r[i]=getrand(min, max);}void show( int r[], int n){int i;for(i=0;i<n;i++)cout << r[i]<<" ";cout << endl;}int partition( int r[], int i, int j){//由你完成}void quicksort( int r[], int i, int j){//由你完成}int main(){srand( time(0));int a[n];set(a, n);cout<<"(710点数解答 | 2024-11-14 10:44:25)331
- [阿里通义] 快速排序:# include< iostream>using namespace std;# include< stdlib. h># include< time. h>const int n =10;const int min= 10;const int max=99;int getrand( int min, int max){return ( rand()%( max-min+1)+ min);}void set( int r[], int n){int i;for(i=0;i<n;i++)r[i]=getrand(min, max);}void show( int r[], int n){int i;for(i=0;i<n;i++)cout << r[i]<<" ";cout << endl;}int partition( int r[], int i, int j){//由你完成}void quicksort( int r[], int i, int j){//由你完成}int main(){srand( time(0));int a[n];set(a, n);cout<<"(951点数解答 | 2024-11-14 10:46:29)314
- [字节豆包] 快速排序:# include< iostream>using namespace std;# include< stdlib. h># include< time. h>const int n =10;const int min= 10;const int max=99;int getrand( int min, int max){return ( rand()%( max-min+1)+ min);}void set( int r[], int n){int i;for(i=0;i<n;i++)r[i]=getrand(min, max);}void show( int r[], int n){int i;for(i=0;i<n;i++)cout << r[i]<<" ";cout << endl;}int partition( int r[], int i, int j){//由你完成}void quicksort( int r[], int i, int j){//由你完成}int main(){srand( time(0));int a[n];set(a, n);cout<<"(472点数解答 | 2024-11-14 10:51:44)308
- [字节豆包] #include <iostream> using namespace std; int main() { int n; cin >> n; if ( ) { cout << "奇数"; if ( ) { cout << "且是5的倍数" << endl; } else { cout << "但不是5的倍数" << endl; } } else { cout << if ( ) { cout << } else { cout << } } return 0; }输入一个数,如果它是奇数,则接着判断它是否是5的倍数,如果它是偶数,则接着判断它是否是4的倍数。输出奇偶性判断的结果和倍数判断的结果。 (409点数解答 | 2025-12-20 19:04:17)25
- [字节豆包] #include<iostream> #include<cmath> using namespace std; int f[2] = {11, 21}; int a[25 * 2500 + 10], n = 0; int main(){ char tmp; while(1){ cin >> tmp; if(tmp == 'E') break; else if(tmp == 'W') a[n++] = 1; else if(tmp == 'L') a[n++] = 0; } for(int k = 0; k < 2; k++){ int w = 0, l=0; for(int i = 0; i < n; i++){ w += a[i]; l += l - a[i]; if((max(w, l) >= f[k]) && abs(w - 1) >= 2) { cout << w << ": " << l << endl; } } cout << w << ": " << l << endl; cout << endl;(868点数解答 | 2025-12-02 18:30:13)48
- [字节豆包] #include<iostream> using namespace std;#include<stdlib.h>#include<time.h> const int n =10; const int min =10; const int max =99; int getrand(int min, int max) { return (rand() % (max - min +1) + min); void set(int r[], int n){ int i; for(i = 0; i< n; i++) r[i] = getrand(min,max); void show(int r[], int n) { int i; for (i = 0; i<n;i++) cout << r[i] << ""; cout << endl;}void sift(int r[],int m,int k){ } void heapsort(intr[], int n){ //由你完成 int main(){ srand(time(0)); int a[n]; set(a,n); cout <<"原序(417点数解答 | 2024-11-28 11:20:23)363
- [字节豆包] #include <iostream> using namespace std; int main() { int n, m; cin >> n >> m; int a[3005]; // 输入每个事件的刺痛值 for (int i = 0; i < n; i++) { cin >> a[i]; } // 计算前m个刺痛值的和作为初始最小值 int sum = 0; for (int i = 0; i < m; i++) { sum += a[i]; } int minSum = sum; // 遍历后续的连续m个刺痛值 for (int i = m; i < n; i++) { // 计算新的连续m个刺痛值的和 sum = sum - a[i - m] + a[i]; // 更新最小值 if (sum < minSum) { minSum = sum; (805点数解答 | 2025-11-24 19:54:06)47
- [字节豆包] #include<iostream> using namespace std;#include<stdlib.h>#include<time.h> const int n =10; const int min =10; const int max =99; int getrand(int min, int max) { return (rand() % (max - min +1) + min); void set(int r[], int n){ int i; for(i = 0; i< n; i++) r[i] = getrand(min,max); void show(int r[], int n) { int i; for (i = 0; i<n;i++) cout << r[i] << ""; cout << endl; void heapsort(intr[], int n){ //由你完成 int main(){ srand(time(0)); int a[n]; set(a,n); cout <<"原序列:"; show(a,n); cout <<"新序列:\n"; h(684点数解答 | 2024-11-28 11:21:15)311
- [字节豆包] #include <iostream> using namespace std; int main() { int a[20], n, x, sum = 0; //n表示数字个数,x表示信号数字,sum表示总和 cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; } cin >> x; for (int i = 0; i < n; i++) { //判断输入的数字是否是信号数字的倍数 if (a[i]==x*3) { sum+=a[i]*3; } else if (a[i]==x*5) { sum+=a[i]*5; } else if (a[i]==x*7) { sum+=a[i]*7; } else { (569点数解答 | 2026-01-25 11:29:51)23
- [阿里通义] #include<iostream> using namespace std;#include<stdlib.h>#include<time.h> const int n=10; const int min=10; const int max=99; int getrand(inmin,int max) { return (rand()%(max-min+1)+min); void set(int r[],int n) { int i; for(i=0; i<n; i++) r[i]=getrand(min,max); void show(intr[],int n){ int i; for(i=0; i<n; i++) cout<<r[i]<<""; cout<<endl; void insertsort(int r[],int n){//由你完成} int main() { srand(time(0)); int a[n]; set(a,n); cout<<"原序列:"; show(a,n); cout<<"新序列: \n; insertsort(a,n);//show(a,n);(690点数解答 | 2024-10-31 10:11:20)319