最近我正在跟著一本書——《資訊學奧賽一本通(C++版)》學習C++,一維陣列上機練習題中有一道題如下:
【題目描述】
輸出一個整數數列中不與最大數相同的數字之和。
【輸入】
輸入分為兩行:
第一行為N(N為接下來數的個數,N <= 100);
第二行N個整數,數與數之間以一個空格分開,每個整數的范圍是-1000,000到1000,000。
【輸出】
輸出為N個數中除去最大數其余數字之和。
【輸入樣例】
3
1 2 3
【輸出樣例】
3
我的程式如下:
# include <cstdio>
int main()
{
int m, max, min;
scanf("%d", &m);
int numbers[10001];
for (int i = 1; i <= m; ++i)
{
scanf("%d", &numbers[i - 1]);
if (i == 1)
{
max = min = numbers[0];
}
if (numbers[i - 1] > max)
{
max = numbers[i - 1];
}
if (numbers[i - 1] < min)
{
min = numbers[i - 1];
}
}
printf("%d\n", (max - min));
return 0;
}
那本書有一個配套的測評網站——http://ybt.ssoier.cn:8088/,我就把我的程式傳了上去,它用10組數測驗了10遍,第4遍出了問題,它說答案錯誤,我很納悶


,看了半天也沒有看出來錯誤在哪里,于是我就看了書后參考答案,答案如下:
#include<cstdio>
using namespace std;
int main()
{ //最大值初始化為很小的數,保證能替換陣列里的數,最小值同理
int a[10001],m,max=-10001,min=10001;
scanf("%d",&m);
for (int i=1;i<=m;++i)
{
scanf("%d",&a[i]);
if(a[i]>max) max=a[i];
if(a[i]<min) min=a[i];
}
printf("%d",max-min);
return 0;
}
我更納悶了


,演算法上沒有不同之處呀??????


后來發現:我創建了一個整型變數difference,而答案里面沒有,直接輸出max-min,我把difference去掉之后,測驗就通過了,我極為納悶,把max-min存入到變數里面再呼叫和直接用不一樣嗎???反正都是整數,也沒有型別不同的問題,怎么就錯了呢???












求各位大佬指教!!!謝謝各位!!!


uj5u.com熱心網友回復:
求助各位大佬們!!!蟹蟹各位了!!!
uj5u.com熱心網友回復:
【輸出】輸出為N個數中除去最大數其余數字之和。
你們代碼里面也沒有求和部分啊?
uj5u.com熱心網友回復:
不與最大數相同的數字之和跟
最大數減最小數
是一回事嗎?
uj5u.com熱心網友回復:
//【題目描述】
//輸出一個整數數列中不與最大數相同的數字之和。
//
//【輸入】
//輸入分為兩行:
//
//第一行為N(N為接下來數的個數,N <= 100);
//
//第二行N個整數,數與數之間以一個空格分開,每個整數的范圍是-1000,000到1000,000。
//
//【輸出】
//輸出為N個數中除去最大數其余數字之和。
//
//【輸入樣例】
//3
//1 2 3
//【輸出樣例】
//3
#include<cstdio>
using namespace std;
int main()
{
int i,a[100],m,max=-1000001,sum;
scanf("%d",&m);
for (i=0;i<m;++i) {
scanf("%d",&a[i]);
if(a[i]>max) max=a[i];
}
sum=0;
for (i=0;i<m;++i) {
if (a[i]!=max) sum+=a[i];
}
printf("%d\n",sum);
return 0;
}
//輸入
//4
//1 2 4 4
//輸出
//3
//
uj5u.com熱心網友回復:
我題目都沒看明白,【輸出】輸出為N個數中除去最大數其余數字之和。代碼里是找到最大數和最小數,輸出他們之差嗎?uj5u.com熱心網友回復:
高中數學老師敲黑板:“審題!審題!審題!”
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/265121.html
標籤:C++ 語言
上一篇:這二分查找寫的對嗎?
