[ad_1]
#include"stdio.h" int findMin(int x[100],int n){ int min = x[0]; for(int i=1;i<n;i++){ if(min>x[i]){ min=x[i]; } } return min; } int findMin2(int x[100],int n){ int min_2=x[1]; int min= findMin(x,n); for(int i=0;i<n;i++){ if (min_2>min && min_2>x[i]){ min_2=x[i]; } } return min_2; } int main(){ int a[100],n; printf("Please enter the number n is"); scanf("%d",&n); for(int i=0;i<n;i++){ printf("a[%d]",i); scanf("%d",&a[i]); } printf("\nThrough which we have this array:"); for (int i=0;i<n;i++){ printf("%d",a[i]); } printf("\n%d",findMin(a,n) ) ; printf("\n%d",findMin2(a,n) ); }
私が試したこと:
この問題がわかりません
解決策 1
値の 1 つの配列と、最小数を見つけるための 2 つの方法があります。 したがって、明らかに両方の答えは同じになります。 ただし、 findMin2
は 2 番目に小さいものを見つけることになっているため、以下の数値をチェックして無視する必要があります。 min
. しかし、あなたは質問の詳細な説明を提供していません。
解決策 2
正直なところ、あなたが持っているコードはあまり意味がありません。 ×だと思う理由は何ですか?[1] 最小値ではないですか? そうである場合、コードはループ内の if 条件を通過できないため、他の値を見つけることができません!
最も低い 2 つの値を見つけようとしている場合、最も簡単な方法はすべての値を並べ替えることです。最も低い 2 つの値が一番下に表示されます。
または、1 つのループを使用して、2 つの最小値を維持することもできます。
#include <stdio.h> #define MaxInt 0x7FFFFFFF; int main() { int arr[] = {9,8,7,3,1,5,2,6,4}; int min1 = MaxInt; int min2 = MaxInt; for (int i = 0; i < 9; i++) { if (arr[i] < min1) { min2 = min1; min1 = arr[i]; } else if (arr[i] < min2) { min2 = arr[i]; } } printf("%u,%u\n", min1, min2); return 0; }
解決策 3
2 つの関数はどちらも同じ最小値を見つけます。 最小値は、異なるインデックスで複数回発生することもあります。 ここでは、値またはインデックスのどちらを検索または比較する必要があるかが明確ではありません。 同じ最小値を 2 回検索しないようにするには、関数 findMin2() に、検出しない最小値を伝える必要があります。 インデックスを返すと、両方を実装できます。 メインプログラムは次のようになります。
C
int main() { int a[] = { 9,8,7,3,-3,1,5,2,-8,6,4 }; size_t n = sizeof(a) / sizeof(a[0]); unsigned min = findMin(a, n); unsigned min2 = findMin2(a, n, min); printf("\n%d, %d\n", a[min], a[min2]); return 0; }
関数 findMin2() では、これを行うことができます。
C
int min2 = 0; if (n < 2) return 0; // not to solve! if (min1 == 0) min2++;
そしてループ内:
C
if (x[min2] > x[i] && (i != min1)) { ..
[ad_2]
コメント