首页 > 解决方案 > 最终项目介绍 C++ 编程课程

问题描述

所以我需要帮助解决这个问题!!

您正在滚动一个红色、一个黄色和一个绿色标准骰子(每边都有数字 1-6)并将它们组合成一个 3 位数字,使用红色值作为个位,黄色值作为十位,绿色值为百位。例如,如果您掷出红色的 3、黄色的 5 和绿色的 2,则组合的 3 位数字将是 253。

你重复这个过程,你的工作就是不断地找到所有这些 3 位数的平均值。

更准确地说,您需要首先读取一个整数,该整数告诉您将平均多少个 3 位数字。接下来,您需要读取第一次投掷的红色值、黄色值、绿色值,并打印出相应的 3 位数字以及当前平均值,并保留一位小数。然后你重复这个过程给定的轮数。

这是我到目前为止所拥有的,我认为我非常接近只是错过了一些东西,但我无法弄清楚它是什么:

\\

#include <stdio.h>
int main(void){
    int i;
    int Red=0;
    int Yellow=0;
    int Green=0;
    double Average=0;
    int Rounds=0;
    int together=0;
    scanf("%d", &Rounds);
    for (i=0;i<Rounds;i++){
    scanf("%d %d %d", &Green, &Yellow, &Red);
    }
    for (i=0;i<Rounds;i++){
    together =((Green*100)+(Yellow*10)+Red);
    Average=together/Rounds;
    printf("you rolled: %d, current average: %.1lf\n", together, Average);
    }
    return 0;
}

\\

标签: c++

解决方案


如果我正确理解了问题,您的代码需要保持要平均的值的运行总和,因为现在您的代码永远不会将下一个值添加到要划分的总数中。

此外,平均值需要是数字的总和除以总和的整数数:(i + 1)。变量 rounds 只能用于决定循环多少次。

可能导致问题的另一件事是绿色、黄色和红色的值在最终的 for 循环中永远不会改变。您需要采用第一个 for 循环中的逻辑并将其作为最终循环的第一行。然后只需删除第一个 for 循环。希望这可以帮助:

     for (i=0;i<Rounds;i++){
      scanf("%d %d %d", &Green, &Yellow, &Red);
      together += ((Green*100)+(Yellow*10)+Red);
      Average=together/(i + 1);
      printf("you rolled: %d, current average: %.1lf\n", together, Average);
     }

同样如上所述,整数除法也可能导致问题。也许使用双精度数而不是整数。


推荐阅读