【问题标题】:Checking 5 ints in an array if 3 are the same如果 3 个相同,则检查数组中的 5 个整数
【发布时间】:2018-12-11 01:47:34
【问题描述】:

我有一个包含五个随机数的 int 数组。我正在尝试检查其中三个数字是否匹配。

int die[5] = {2, 3, 5, 2, 1};
int kind = 0;
int score = 0;
int i = 0;
int x = 0;

    for (i; i <= 4; i++) {
        for (x; x <= 4; x++) {
            if (die[i] == die[x]) {
                kind++;
                score += die[i];
            }
        }
    }

我遇到的问题是它会与自己进行比较的第一个案例。这将永远成为现实。如果我向索引添加 +1,它最终会超出范围。

如果我从 1 而不是 0 开始,那么当它到达第二个数字时,它会在检查自身与第二个数字(本身)时返回相同的值。

【问题讨论】:

  • 你有没有初始化你的ix
  • it will compare itself to itself 尝试从 1 而不是 0 开始 x
  • 不清楚您是希望 exactly 3 匹配,还是 至少 3 匹配。这个问题有一些不涉及嵌套循环的简化。

标签: c


【解决方案1】:

您可以检查 i 是否等于 j 和 continue; 您的循环。

for(i=0; i<=4; i++){
    // you can set x=i+1 and skip some numbers
    for(x=0; x<=4; x++){ 
        if(i==x)
            continue;
        if (die[i] == die[x]) {
            kind++;
            score += die[i];
        }
     }
 }

编辑: 有更简单的方法(检查 3 个数字是否相等),但如果您只想跳过迭代,请使用 continue。

【讨论】:

  • 由于x 是从i+1 开始的,if(i==x) 永远不会是真的。
  • 另外i&lt;=4 是没有意义的(与i&lt;4 相比),因为如果i 为4,x=i+1 将越界。
  • 你们俩都是对的。我没有考虑太多,我只是想告诉他如何使用continue 语句。我把它改成了简单的 x=0
【解决方案2】:
int die[5] = {2, 3, 5, 2, 1};

int kind = 0;
int score = 0;

for (i = 0; i < 4; i++) {          // last check will be die[3] == die[4] to avoid 
                                   // die[4] == die[4]
    for (x = i + 1 ; x < 5; x++) { // it always checks with the next element
        if (die[i] == die[x]) {
            kind++;
            score += die[i];
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    相关资源
    最近更新 更多