私は各ペアの間の差を計算し、その要素に関連する最大差異をその場所の同じ配列に格納しました。たとえば、配列は1 2 3ですので、a [0] = 2、a [1] = 1、 1の差が3で最大で2の差が3で最大であるので、配列のサイズを1減らして何の操作をしても、今度は最大の差の値を計算して0番目のインデックスに置きます縮小された配列のサイズまでループを実行し、この最大値が現れる回数を数えますが、このアプローチは時間がかかります。単純なロジックを提案する人もいます。 の入力です。例2の場合はありません。 最初の配列の要素数 1番目の配列のペアの最大数は 2番目の配列の要素はありません 要素の最大数2番目の配列で他のすべてのペアの中で値の差が最大のペアの数を見つける方法は?
#include <stdio.h>
#include<math.h>
int max=0;
int main()
{
int test_no, n1,n2,i,j,a,b,count1=1,count2=1;
scanf("%d",&test_no);
printf("\n");
scanf("%d",&n1);
printf("\n");
int arr1[n1];
for(i=0;i<n1;i++)
{
scanf("%d ",&arr1[i]);
}
for(i=0;i<n1-1;i++)
{
for(j=i+1;j<=n1-1;j++)
{
a=abs(arr1[i]-arr1[j]);
if(max<=a)
max=a;
}
arr1[i]=max;
max=0;
}
int temp;
max=arr1[0];
for(i=1;i<n1-1;i++)
{
if(max<arr1[i])
{
temp=max;
max=arr1[i];
arr1[i]=temp;
arr1[0]=max;
}
}
for(i=1;i<n1-1;i++)
{
if(arr1[i]==arr1[0])
{
count1++;
}
}
printf("\n");
scanf("%d",&n2);
int arr2[n2];
max=0;
for(i=0;i<n2;i++)
{
scanf("%d ",&arr2[i]);
}
for(i=0;i<n2-1;i++)
{
for(j=i+1;j<=n2-1;j++)
{
a=abs(arr2[i]-arr2[j]);
if(max<=a)
max=a;
}
arr2[i]=max;
max=0;
}
temp=0;
max=arr2[0];
for(i=1;i<n2-1;i++)
{
if(max<arr2[i])
{
temp=max;
max=arr2[i];
arr2[i]=temp;
arr2[0]=max;
}
}
for(i=1;i<n2-1;i++)
{
if(arr2[i]==arr2[0])
{
count2++;
}
}
printf("%d \n",count1);
printf("%d",count2);
return 0;
}
私はあなたが適切にあなたのコードをフォーマットする必要があります示唆しています。 – MikeCAT
隣接する2つの配列要素の最大の違いを調べようとしていますか? 最大値を保持する一時変数を使用して、その差異とその値を比較し、差がより大きい新しいペアが見つかった場合は最大値をリセットするという簡単なオプションがあります。 ---擬似コード - |型のint maxValue = | |配列をループし、隣接する数字を取る| |差を計算する| | difference> maxValue | | maxValue = difference | ..... –
ArunGeorge
実際に問題が生じるのは、一番大きな違いがあると、それを何回取得しなくてはならないということです。 –