{1,2,3} という数の配列があり、可能な限り最小のターン数で数を等しくしたいとします。ここで、「ターン」の定義は次のとおりです。
次に、要素の 1 つの値をそのまま固定し、他のすべての数値を 1 ずつ増やす必要があります。
例えばを考えると。既に述べた - A={1,2,3} 、目標はそれらを均等化することです。私がすでに行ったことは、ロジックを定式化することです。つまり、最小数のターンを使用する方法は、各ターンで最大数を選択することです。
反復 1: A[2]=3 を保持します。反復終了時の配列 => {2,3,3}
反復 2: A[2]=3 を保持します。反復終了時の配列 => {3,4,3}
反復 3: A[1]=4 を保持します。反復の最後の配列 => {4,4,4}
したがって、取ったターン数 = 3
私が書いたコードは次のとおりです。
#include<iostream>
#include<stdio.h>
int findMax(int *a,int n)
{
int i,max;
max=1;
for(i=2;i<=n;i++)
{
if(a[i]>a[max])
{
max=i;
}
}
return max;
}
int equality(int *a,int n)
{
int i;
for(i=1;i<n;i++)
{
if(a[i]!=a[i+1]) return 0;
}
return 1;
}
int main()
{
int a[100],i,count,t,posn_max,n,ip=0;
scanf("%d",&t);
while(ip<t)
{
count=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
while(equality(a,n)==0)
{
posn_max=findMax(a,n);
for(i=1;i<=n;i++)
{
if(i!=posn_max)
{
a[i]=a[i]+1;
}
}
count++;
}
printf("%d\n",count);
ip++;
}
return 0;
}
これにより、必要な正しい答えが得られます。しかし、私はそれをさらに最適化したいと考えています。
私の制限時間は 1.0 秒です。しかし、審査員サイトによると、私のコードは 1.01 秒かかります。誰でも私を助けることができますか?
私が見る限り、入力/出力部分を最適化するために、cout/cin と比較して scanf/printf ステートメントを使用しました。しかし、他に何を改善すればよいのでしょうか?