C ++数组交换并找到最小的元素

时间:2018-05-29 12:47:43

标签: c++ arrays

我正在尝试找到第一个最小的数组但我的代码不显示任何输出。没有错误或警告。实际上,我正在尝试检查我从大学获得的算法。

#include <iostream>
using namespace std;
int main(){

    int arr[7]= {8,4,6,9,2,3,1};
    int n = sizeof(arr)/sizeof(arr[0]);

    int smallest = 0;
    for(int j = 1; j = (n-1); j = (j + 1) )
    {
        smallest= j ;
        for(int i = (j+1); i = n ; i = (i + 1))
        {
            if (arr[i]<arr[smallest])
            {
                smallest = i;
                int swaper = arr[j];
                arr[j] = arr[smallest];
                arr[smallest] = swaper;
            }
        }
    }
    for(int a = 1; a = n; a = (a + 1))
    {
        cout<<arr[a];
    }   
    return 0;
}  

2 个答案:

答案 0 :(得分:4)

此代码有三个错误:

    for(int a = 1; a = n; a = (a + 1))
    {
        cout<<arr[a];
    }

首先,数组从零开始,而不是一个。所以for语句的第一部分应该是int a = 0;

其次,您不是比较 an,而是 n分配给a, (并且值不为零,所以你总是继续)。平等测试是==,但你还是不想要那样!

第三,循环条件是何时继续,而不是何时停止。所以你需要<!=(要么会工作,人们会争论哪个更好)。

在C ++中用一系列整数写循环的常规方法是:

    for (int a = 0; a < n; a++)

你至少是一致的,并且在每个循环中犯了同样的错误。你需要在每个循环中修复它。

答案 1 :(得分:0)

# include <iostream>
using namespace std;
int main ()
{
  int  a[100][100],n,k,i,j,aux,mi=0;
 cin>>n>>k;
for(i=1;i<=n;i++)
       for(j=1;j<=k;j++)
             cin>>a[i][j];

for(i=1;i<=n-1;i++)
     for(j=i+1;j<=n;j++)
          if(a[i][k]>a[j][k])
              {aux=a[i][k];
               a[i][k]=a[j][k];
               a[j][k]=aux;
             } //until here you are sorting the 2D array

             for(i=1;i<=n;i++) {
                for(j=1;j<=k;j++) {
                cout<<a[i][j]<<" ";
                }
                cout<<endl;
             }
cout<<endl;
  mi=a[1][1];
  for (i=1; i<=n; i++)
    {
        for (j=1; j<=n; j++)
            if (mi<a[i][j])
            mi=a[i][j];
    } //here you're finding the smallest element
    cout<<mi;
    return 0;
  }

代码没有编译,但这个想法应该解决90%,你只需编写代码。