如何查看一个数字输入了多少次

Posted

技术标签:

【中文标题】如何查看一个数字输入了多少次【英文标题】:How to check how many times a number has been entered 【发布时间】:2015-11-20 21:49:35 【问题描述】:

我正在尝试解决我收到的任务表上的一个问题,以帮助我进一步理解课堂上的 C++ 代码。

问题是(我引用):

编写一个程序:

要求用户将 1 到 5 之间的 10 个数字输入一个数组并在屏幕上显示该数组 创建第二个大小为 5 的数组并用零填充它 计算在第一个数组中输入了多少个 1、2、...、5,并将此数字存储在第二个数组中。 显示第二个数组,如下例所示。

问题是如何检查一个数字输入了多少次。我在想一个for 循环,但我写它的方式根本上是不正确的,所以我发现自己很难看到我所犯的错误。也许我错过了一些简单的东西?任何帮助都会很棒。

这是我的(可怕的)for 循环尝试,所以你可以看到我的错误。

#include <iostream>
#include <windows.h>

using namespace std;

int main()

    int input[10];
    const int MAX_NO = 5;
    int COUNT[5] =  0,0,0,0,0 ;
    int count = 10;

    for (int i = 0; i < count; i++)
    
        cout << "Please enter a number for value " << i + 1 << " :";
        cin >> input[i];

        while (input[i] < 1 || input[i] > 5)
        
            cout << "Error: Enter another number between 1 and 5: ";
            cin >> input[i];
        
    

    cout << endl << "You entered ";

    for (int i = 0; i < count; i++)
    
        cout << input[i] << " ";
    

    cout << "\n";
    // show how many times 1 number appears 

    for (int i = 1; i <= 5; i++)
    
        if (input[i] == i)
        
            COUNT[i]++;
        
    


    for (int i = 0; i < MAX_NO; i++)
    
        cout << i + 1 << " appears " << COUNT[i]
             << " times in the input" << endl;
    
    cout << endl;

    system("pause");
    return 0;

【问题讨论】:

【参考方案1】:

COUNT[ input[i]-1 ]++;

在您的第一个循环中(验证后)。一旦你这样做了,你就不需要第二个循环来计算结果。

这是由内而外的,首先获取input[i] 是什么,然后使用它来修改COUNT 数组中的(input[i]-1)'th 位置。如果用户在循环的第一次运行时输入 4,那么 i == 0input[i] == 4。由于数组是从 0 开始的,它将递增 COUNT[input[i]-1],在本例中为 COUNT[4-1] == COUNT[3]

在您的初始循环运行后,1 的数量将在 COUNT[0] 中,2 的数量将在 COUNT[1] 中,依此类推。

【讨论】:

我删除了我的消息纯粹是因为我没有正确阅读您的消息。很抱歉,这是漫长的一天,非常感谢您在编辑并解释后我更好地理解了您的逻辑。是的,我可以看到你是如何做到的。谢谢。【参考方案2】:
#include <iostream>
#include <windows.h>
using namespace std;
int main()

//declare a constant values
int input[10];
int count = 10;  //all constant MUST be in capital letters

//second array filled with zeros
const int MAX_NO = 5;   
int COUNT[5] =  0, 0, 0, 0, 0 ;

//ask user for 10 input values
for (int i = 0; i < count; i++)

    cout << "Please enter a number for value " << i + 1 << " :";
    cin >> input[i];
    //check if input numbers are between 1 and 5 inclusive
    while (input[i] < 1 || input[i] > 5)
    
        cout << "Error: Enter another number between 1 and 5: ";
        cin >> input[i];
    
    /* show how many times 1 number appears.
    this section should be in the main loop which would enable the program to check how many times a
    number is entered so that it is stored in the second array. changed i to secondCount because this is the counting index of the second array not the first which you've called i (one of the reason you'd all zero as output when u ran your code)*/

    for (int secondCount = 1; secondCount <= MAX_NO; secondCount++)  
    
        if (input[i] == secondCount)
        
            COUNT[secondCount-1]+= 1;    //use minus 1 from i and increment. += 1 is the same as COUNT++
        
    


//display number entered in the first array
cout << endl << "You entered ";

for (int i = 0; i < count; i++)

    cout << input[i] << " ";


cout << "\n";

//display how many times a number is entered.

for (int secondCount = 0; secondCount < MAX_NO; secondCount++)

    cout << secondCount + 1 << " appears " << COUNT[secondCount]
        << " times in the input" << endl;

cout << endl;

system("pause");
return 0;

输出:

Please enter a number for value 1 = 1
Please enter a number for value 2 = 1
Please enter a number for value 3 = 1
Please enter a number for value 4 = 2
Please enter a number for value 5 = 3
Please enter a number for value 6 = 2
Please enter a number for value 7 = 4
Please enter a number for value 8 = 4
Please enter a number for value 9 = 3
Please enter a number for value 10 = 2

You entered: 1 1 1 2 3 2 4 4 3 2 

1 appears 3 times in the input
2 appears 3 times in the input
3 appears 2 times in the input
4 appears 2 times in the input
5 appears 0 times in the input

【讨论】:

【参考方案3】:
for (int i = 1; i <= 5; i++)

    if (input[i] == i)
    
        COUNT[i]++;
    

让我们看看它在做什么。首先检查input[1]。 (这应该是input[0],因为数组索引从 0 开始)。然后检查input[1] 是否等于1。如果是,则增加COUNT[1]。 接下来,它检查input[2]。然后它检查input[2] 是否等于2。如果是,它增加COUNT[2]。以此类推,直到它通过input[5]。 你看到这个问题了吗?您只检查前 5 个输入,并且只根据单个值检查它们。

【讨论】:

是的,我知道我做错了什么,我确实在描述中说明了它,我只是认为我最好把它留在里面,这样人们就知道我此时此刻在想什么去做,即使我知道它不正确 你说你知道循环是错误的,它就是。但这是否更好地说明了为什么它是错误的?您需要检查输入中的每个值(因此从 0 循环到 9)并增加正确的位置。 是的,你解释的方式是我在输入断点并在代码运行时跟随代码时得出的结论。

以上是关于如何查看一个数字输入了多少次的主要内容,如果未能解决你的问题,请参考以下文章

如何查看电脑最大支持多少GB内存

如何查看我在文件上使用了多少次 fopen?

c语言如何查看多重for循环一共循环了多少次,看看输出了多少行?

c语言如何查看多重for循环一共循环了多少次,看看输出了多少行?

如何查看电脑最大支持多少GB内存

Linux下如何查看一个文件夹下有多少文件