剛開始寫了一邊,死活過不去,不知道錯在哪里。然后改了一下time的重定義,把結果直接加給了time,居然就過了?
請教一下各位這是為什么?
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node {
char name[15];
int num=0;
int time;//未初始化
};
bool cmp(node a, node b) {
if (a.num != b.num) return a.num > b.num;
else {
if (a.time != b.time) return a.time < b.time;
else return strcmp(a.name, b.name) < 0;
}
}
int main()
{
int n, m;
scanf("%d%d", &n, &m);
struct node student[1000];
int i = 0, passtime, wrong;
while (scanf("%s", &student[i].name) != EOF) {
for (int j = 0; j < n;j++) {
wrong = 0;
scanf("%d(%d)", &passtime, &wrong);
if (passtime > 0) {
student[i].num++;
student[i].time = passtime + m * wrong;//將值直接賦給time
}
}
i++;
}
sort(student, student + i, cmp);
for (int j = 0; j < i; j++) {
printf("%-10s %2d %4d\n", student[j].name, student[j].num, student[j].time);
}
return 0;
}
改了之后就過來,無語。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node {
char name[15];
int num=0;
int time=0;
};
bool cmp(node a, node b) {
if (a.num != b.num) return a.num > b.num;
else {
if (a.time != b.time) return a.time < b.time;
else return strcmp(a.name, b.name) < 0;
}
}
int main()
{
int n, m;
scanf("%d%d", &n, &m);
struct node student[1000];
int i = 0, passtime, wrong;
while (scanf("%s", &student[i].name) != EOF) {
for (int j = 0; j < n;j++) {
wrong = 0;
scanf("%d(%d)", &passtime, &wrong);
if (passtime > 0) {
student[i].num++;
student[i].time += passtime + m * wrong;
}
}
i++;
}
sort(student, student + i, cmp);
for (int j = 0; j < i; j++) {
printf("%-10s %2d %4d\n", student[j].name, student[j].num, student[j].time);
}
return 0;
}
大家幫忙看看吧!
uj5u.com熱心網友回復:
改之前是什么樣的?另外,如果int time;//未初始化 是這種情況,如果if (passtime > 0) { 沒有進入這個if,那么student[i].time = passtime + m * wrong;//將值直接賦給time 就沒有機會賦值,student[i].time就是垃圾資訊,你的com比較結果就未必準確
uj5u.com熱心網友回復:
上面的代碼就是改之前的,下面是改之后的,改動的地方就那兩處注釋過的,其他一模一樣。代碼沒問題,不知道是不是涉及到c語言變數記憶體賦值方面的知識?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/22488.html
標籤:C++ 語言
