#include <iostream> #include <iomanip> #include <cstring> #include <cmath> using namespace std; #define ROW 3 #define COL 4 int main() { int a[ROW][COL], i, j, *p[3]; //指针数组;p[0]为a[0][0]的地址 int sum; for (i = 0; i < ROW; i++) a[i][0] = *p[i]; for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) cin >> *(p[i] + j); //a[i][j] } sum = 0; for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { if (j % 2 == 0) sum = sum + *(p[i] + j); } cout << endl; } cout << "sum=" << sum << endl; return 0; }优化
时间: 2024-03-23 19:43:24 浏览: 51
这段代码可以优化的地方有很多,以下是一些可能的改进:
1. 指针数组的初始化可以放在一起,简化代码:
```
int a[ROW][COL], i, j, *p[3] = {a[0], a[1], a[2]};
```
2. 在第一次循环中,可以直接用指针数组来给每一行的第一个元素赋值,不需要用指针解引用:
```
for (i = 0; i < ROW; i++) {
p[i] = a[i];
}
```
3. 在第二次循环中,可以直接用指针数组来访问二维数组的元素,不需要用指针解引用:
```
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
cin >> p[i][j];
}
}
```
4. 在计算奇数列元素和的时候,可以使用步长为2的循环,不需要用if语句判断:
```
sum = 0;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j += 2) {
sum += p[i][j];
}
cout << endl;
}
```
5. 输出变量sum的值时,可以使用控制符setw()来控制输出宽度,让输出更美观:
```
cout << "sum = " << setw(3) << sum << endl;
```
综上所述,优化后的代码如下:
相关问题
#include<iostream> #include<cstring> #include<vector> #include<unordered_map> #include<algorithm> #include<queue> #include<iomanip> #include<cmath> #include <fstream> #include <cstdlib> #include <map> // #define int long long using namespace std; const int N = 200010; int n,m,t,p; int ar[N],s[N],cnt,sum,ans; int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0}; double a,b; string st; struct pe { double num,p; }pv[N]; bool cmp (pe a,pe b) { if(a.p==b.p)return a.num<b.num; return a.p>b.p; } void solve () { cin>>n; for(int i=0;i<n;i++) { cin>>a>>b; pv[i].p=a/(a+b); pv[i].num=i+1; } sort(pv,pv+n,cmp); for(int i=0;i<n;i++)cout<<pv[i].num<<" "; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); solve(); return 0; } 请找出代码错误
代码中没有明显的错误。但是,可能存在一些潜在的问题。
1. 在排序函数`cmp`中,当两个`pe`结构体的`p`值相等时,比较的是`num`值。这可能会导致不稳定的排序结果,如果对结果的顺序有要求,可能需要修改排序函数。
2. `pv`数组的大小为`N`,如果`n`的值大于`N`,可能会导致数组越界。
3. 在读取输入时,没有进行输入合法性检查。如果输入的数据格式不正确,可能会导致程序出错。
4. 程序中定义了一些未使用的变量,如`t`、`m`、`s`、`ar`等。可以考虑删除这些无用的变量。
请注意,以上问题只是可能存在的潜在问题,具体还需要根据实际运行情况来确定错误的原因。
阅读全文