gpt4 book ai didi

c - 将球队名称字符串按照球队获得的分数顺序排列

转载 作者:行者123 更新时间:2023-11-30 16:30:26 25 4
gpt4 key购买 nike

我有一个项目,我应该编写一个代码,输入参加世界杯的国家名称(1 个小组,4 个国家)以及每个国家的得分。然后,程序必须打印分数以及哪两支球队将晋级到下一阶段,例如“第一个晋级的球队是%s”。它打印得分最高的团队的名称,后跟“第二个晋级的团队是 %s”。 ,打印得分第二高的国家。我一生都无法弄清楚如何编写程序打印哪个国家进入下一阶段的部分。

#include <stdio.h> 
#include <stdlib.h>

#define NUMBER 4

void setTeam(char team[NUMBER][20]) /*Names of team in particular group*/
{

setvbuf(stdout, NULL, _IONBF, 0);

int i;
for(i=0;i<NUMBER;i++){
printf("Enter name of team %d: ", i);
scanf("%s", &team[i]);
}

for(i=0;i<NUMBER;i++){ /*print name of teams entered*/
printf("team[%d]=\" %s\"\n", i, team[i]);
}
}

void input(char team[NUMBER][20],int group[NUMBER][7]){ /*Enter goals scored
to calculate Wins, Draws, Loss, GF, GA, GD and PTS */

int score_i, score_j;
int i, j;
for(i=0;i<NUMBER-1;i++){
for(j=i+1;j<NUMBER;j++){
printf("%s vs %s\n",team[i],team[j]);

printf("%s :",team[i]); scanf("%d", &score_i);

group[i][3] += score_i;

printf("%s :",team[j]); scanf("%d", &score_j);

group[j][3] += score_j;

group[i][4] += score_j;
group[j][4] += score_i;

if (score_i == score_j)
{
group[i][1] += 1;
group[j][1] += 1;
} else if (score_i > score_j) {
group[i][0] += 1;
group[j][2] += 1;
} else {
group[j][0] += 1;
group[i][2] += 1;
}

group[i][5] += judge(score_i, score_j);
group[j][5] += judge(score_j, score_i);
group[i][6] = group[i][3] - group[i][4];
group[j][6] = group[j][3] - group[j][4];
}
}
}

int judge(int gain, int loss)
{

if (gain == loss || loss == gain)
return 1;
else if (gain > loss)
return 3;
else
return 0;
}

int display(char team[NUMBER][20], int group[NUMBER][7])
{ /*Print results*/

puts("\n\tTeam, \t\tWin, Draws, Loss, GF, GA, GD, PTS");

int i, j;

for(i=0;i < NUMBER;i++){

printf("\t%-10s,\t%3d,\t%8d,\t%d,\t%2d,\t%3d,\t%5d,\t%9d\n",
team[i],group[i][0],group[i][1],group[i][2],group[i][3],group[i]
[4],group[i][5],group[i][6]);
}
putchar('\n');
}

void advance(char team[][20], int group[][7])
{ /*Identify top 2 teams to advance and print name of teams */

int i, j;
int max;
char temp[NUMBER][20];

puts("\tAdvance");

for(i = 0; i < NUMBER; i++) {
for(j = i + 1; j < NUMBER; j++) {
if (group[i][3] < group[j][3]) {
max = group[i][3];
group[i][3] = group[j][3];
group[j][3] = max;

}
}
}


}



int main(void)
{

int group[NUMBER][7] = {0};
int i,j;
char team[NUMBER][20];

setTeam(team);
input(team, group);
display(team, group);
advance(team, group);

return 0;
}

最佳答案

您应该根据获得的积分数量来比较团队。我通过指定第一队和第二队是下一阶段的候选者来初始化状态。之后你要做的就是比较是否有其他队伍得分更高。如果您发现了新的最高分,您需要重新分配第一队和第二队。如果您找到了新的第二名候选人,您只需重新分配第二名。

void advance(char team[][20], int group[][7])
{ /*Identify top 2 teams to advance and print name of teams */

int i, j;
int max;

int max_id = 0;
int max_id_prev = 1;

puts("\tAdvance");

for(i = 1; i < NUMBER; i++) {
if (group[max_id][5] < group[i][5]) {
max_id_prev = max_id;
max_id = i;
continue;
}
if (group[max_id_prev][5] < group[i][5]) {
max_id_prev = i;
}
}
printf("%s", team[max_id]);
printf("%s", team[max_id_prev]);
}

请考虑对您的代码进行同行评审或将您的代码发布到 Code review 。还可以考虑使用结构来组织代码作为您拥有的数据的表示。它将提高可读性。有很多关于如何编写干净、可读的代码的书籍。

关于c - 将球队名称字符串按照球队获得的分数顺序排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51153099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com