#include<stdio.h> #include<string> struct player{ char name[30]; int num; int cha; }; int main(){ static int orc=0; int n; scanf("%d",&n); int total=0; int average; struct player a[1000]; for(int i=0;i<n;i++){ scanf("%s",&a[i].name); scanf("%d",&a[i].num); total+=a[i].num; } average=(total/n)/2; for(int i=0;i<n;i++){ a[i].cha=a[i].num-average; if(a[i].cha<0){ a[i].cha=-a[i].cha; } } for(int i=0;i<n;i++){ printf("%d %s\n",a[i].cha,a[i].name); } for(int i=0;i<n;i++){ a[n].cha=a[0].cha; if(a[n].cha>a[i].cha){ a[n].cha=a[i].cha; orc=i; } } printf("%d %s\n",average,a[orc].name); }我的代码为啥运行不出正常的结果
时间: 2024-04-15 19:24:55 浏览: 113
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
您的代码有一些问题,导致结果不正确,具体有以下几点需要注意:
1. 结构体数组的声明应该使用`std::string`而不是`char[]`来存储名称。所以将`name`字段从`char name[30]`改为`std::string name`。
2. 在使用`scanf`读取字符串时,不需要使用`&`符号。所以将`scanf("%s", &a[i].name)`改为`scanf("%s", a[i].name)`。
3. 求平均值时,应该将`total / n`的结果除以2而不是乘以2。所以将`average = (total / n) / 2`改为`average = total / (2 * n)`。
4. 在查找差值最小的元素时,错误地将`a[n].cha = a[0].cha`放在了循环内部。应该将其放在循环外部,并且将循环条件改为`i < n`而不是`i <= n`。
5. 在打印结果时,差值应该是绝对值,所以将`printf("%d %s\n", a[i].cha, a[i].name)`改为`printf("%d %s\n", abs(a[i].cha), a[i].name)`。
请根据上述修改建议进行代码调整,应该能够得到正确的结果。如果还有其他问题,请提供更详细的描述。
阅读全文