すうれつきょくさもんだい
1359 ワード
黒板にN個の正の整数からなる数列を書いて、その中の2個の数aとbを消去するたびに、数列に1個の数aを加える.×b+1、このまま黒板に1つの数が残るまで、このような操作で最後に得られたすべての数のうち、最大はmax、最小はminであり、この数列の極差はM=max-minと定義される.
プログラミングしてください.与えられた数列に対して、計算が極めて悪いです.
入力
複数のテストセットを含むように入力します.各試験セットの最初の数Nは、正の整数シーケンス長(0<=N<=50000)を表し、次いで、N個の正の整数である.Nが0の場合は入力が終了します.
しゅつりょく
結果ごとに1行
入力サンプル
出力サンプル
水の問題は直接コードを貼ります:
プログラミングしてください.与えられた数列に対して、計算が極めて悪いです.
入力
複数のテストセットを含むように入力します.各試験セットの最初の数Nは、正の整数シーケンス長(0<=N<=50000)を表し、次いで、N個の正の整数である.Nが0の場合は入力が終了します.
しゅつりょく
結果ごとに1行
入力サンプル
3
1
2
3
0
出力サンプル
2
水の問題は直接コードを貼ります:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
int A[5001], B[5001];
int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
int ReturnMin(int *Arr, int n)
{
int a, b;
while (n > 2)
{
qsort(Arr, n, sizeof(Arr[0]), cmp);
a = Arr[n - 1];
b = Arr[n - 2];
Arr[n - 2] = a * b + 1;
Arr[n - 1] = 0;
n--;
}
return Arr[0] * Arr[1] + 1;
}
int ReturnMax(int *Arr, int n)
{
int a, b, j = 0;
while (j < n - 2)
{
qsort(Arr, n, sizeof(Arr[0]), cmp);
a = Arr[j];
b = Arr[j + 1];
Arr[j + 1] = a * b + 1;
Arr[j] = 0;
j++;
}
return Arr[n - 2] * Arr[n - 1] + 1;
}
int main()
{
memset(A, 0, sizeof(A));
memset(B, 0, sizeof(B));
int i, n;
while (scanf("%d", &n) != EOF && n != 0)
{
for (i = 0; i