#include<stdio.h>
int main()
{
int n,i,min,a[999];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++)
{
if(a[i-1]<a[i])
a[i]=a[i-1];
}
printf("%d",a[i]);
}
為什么這個函式不能正確輸出n個數的最小值,請大佬指教!!!
uj5u.com熱心網友回復:
你要排序嗎?不拍序,不用交換,直接用一個變數保存最小值uj5u.com熱心網友回復:
因為你只是比較相鄰的兩個元素,不相鄰的沒有比,所以結果自然不對改為
min=a[0];//min取第一個元素的值
for (i=1; i<n; i++)
if (min>a[i]) //然后每個元素都跟min比
min=a[i];
printf(“%d”, min);
uj5u.com熱心網友回復:
從頭開始,每相鄰的兩個數比較,把小的賦給后一個數,一直到陣列的最后一個不就是最小的數嗎uj5u.com熱心網友回復:
也可以,像冒泡一樣,那你應該列印a[i-1]而不是列印a[i],想想for回圈結束i是多少?是不是i==n?那陣列長度是n,陣列最后一個元素下標是多少?uj5u.com熱心網友回復:
樓上說得對,a[n]陣列越界了uj5u.com熱心網友回復:
也可以,像冒泡一樣,那你應該列印a[i-1]而不是列印a[i],想想for回圈結束i是多少?是不是i==n?那陣列長度是n,陣列最后一個元素下標是多少? 從頭開始,每相鄰的兩個數比較,把小的賦給后一個數,一直到陣列的最后一個不就是最小的數嗎 因為你只是比較相鄰的兩個元素,不相鄰的沒有比,所以結果自然不對
改為
min=a[0];//min取第一個元素的值
for (i=1; i<n; i++)
if (min>a[i]) //然后每個元素都跟min比
min=a[i];
printf(“%d”, min);
uj5u.com熱心網友回復:
for回圈里面的判斷條件不是i<n嗎,所以最后出回圈的時候i=n-1,好像沒有越界吧 也可以,像冒泡一樣,那你應該列印a[i-1]而不是列印a[i],想想for回圈結束i是多少?是不是i==n?那陣列長度是n,陣列最后一個元素下標是多少? 從頭開始,每相鄰的兩個數比較,把小的賦給后一個數,一直到陣列的最后一個不就是最小的數嗎 因為你只是比較相鄰的兩個元素,不相鄰的沒有比,所以結果自然不對
改為
min=a[0];//min取第一個元素的值
for (i=1; i<n; i++)
if (min>a[i]) //然后每個元素都跟min比
min=a[i];
printf(“%d”, min);
i = n-1的時候不會出回圈,再執行一次i++,這時候i == n了,才出回圈
uj5u.com熱心網友回復:
for回圈里面的判斷條件不是i<n嗎,所以最后出回圈的時候i=n-1,好像沒有越界吧 也可以,像冒泡一樣,那你應該列印a[i-1]而不是列印a[i],想想for回圈結束i是多少?是不是i==n?那陣列長度是n,陣列最后一個元素下標是多少? 從頭開始,每相鄰的兩個數比較,把小的賦給后一個數,一直到陣列的最后一個不就是最小的數嗎 因為你只是比較相鄰的兩個元素,不相鄰的沒有比,所以結果自然不對
改為
min=a[0];//min取第一個元素的值
for (i=1; i<n; i++)
if (min>a[i]) //然后每個元素都跟min比
min=a[i];
printf(“%d”, min);
i = n-1的時候不會出回圈,再執行一次i++,這時候i == n了,才出回圈
哦哦哦,我懂了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/47670.html
標籤:C語言
上一篇:c++定義物件的問題
下一篇:資料顯示從列印機到計算機螢屏?
