首页 > 解决方案 > 这个最小最大程序有问题吗?

问题描述

给定一个自然数 N 和 N 个自然数的列表。您需要打印列表中 N 个值中的最小值和最大值,并用空格字符分隔。

输入

您将从用户编号 N 中读取,然后是 N 个自然数。

输出

该程序将按此顺序打印由空格字符分隔的 2 个数字,分别代表 N 个值中的最小值和最大值。

限制 0 < N < 50 列表中的元素是大于或等于 -100 且小于或等于 100 的整数。

int N, M=0, L=50;
cin >> N;

if(N < 50) {
    for(int R; N >= 1; N--) {
        cin >> R;
        if (L >= R){
            L = L * 0;
            L = L + R;
        }
        if (M <= R){
            M = M * 0;
            M = M + R; 
        }
        R = R * 0;
    }
}
cout << L << " " << M;

该程序正在运行,但我正在运行它的网站并没有给我所有的意义。也许有什么我忘记了。任何反馈?

标签: c++

解决方案


选择最小值和最大值的初始值时出现逻辑错误。假设用户输入“51”、“52”、“53”。从 50 开始,您的代码将输出“50 53” L。您需要选择位于可能的最小/最大值边缘的默认值。看看这个简单的编辑:

int N,M=-100,L=100;
cin>>N;
if(N<50){
    for(int R; N >= 1; N--){
        cin>>R;

        if (L >= R){
            L=L*0;
            L=L+R;
        }
        if (M <= R){
            M=M*0;
            M=M+R;
        }
        R=R*0;
   }
cout<<L<<" "<<M;

我还应该注意,您在这里也采取了不必要的步骤,例如M=M*0; M=M+R;,我建议重命名变量以更准确地表示它们所持有的内容(即 int min, max)

int total_numbers, max=-100, min=100;
cin>>total_numbers;
if(total_number < 50)
{
    for(int i = 0; i < total_numbers;++i)
    {
        int current_number = 0;
        cin >> current_number;
        if(current_number > max)
            max = current_number;
        if(current_number < min)
            min = current_number;
    }

    cout << min << "\t" << max << endl;
}

推荐阅读