#include <iostream>
using namespace std;
int main() {
int n;
cin>>n;
int *arr=new int [n];
for(int k=0;n>k;k )
{
cin>>*(arr k);
}
long long sum1=0,sum2=0,sum3=0;
for(int k=0;n>k;k )
{
sum1=sum1 *(arr k);
if(*(arr k)%2==0)
sum2 ;
else
sum3 ;
}
cout<<sum1<<" ";
cout<<sum3<<" ";
cout<<sum2;
return 0;
}
給定一個N整數序列,你的任務是分別列印它們的總和、奇數個數和偶數個數。
輸入 輸入
的第一行包含一個整數N (1≤ N ≤10?)。輸入的第二行包含由單個空格分隔的N 個整數 (1≤Ai≤10?)。
輸出 分別
列印它們的總和、奇數個數和偶數個數,用空格隔開。示例
輸入
5
1 2 3 4 5
輸出
15 3 2
這段代碼有更好的演算法嗎?我需要它花費更少的執行時間。
我在哪里可以找到任何代碼的更好演算法?
uj5u.com熱心網友回復:
除非您需要重新使用N已存盤在陣列中的整數,否則存盤它們是沒有意義的。您可以在輸入它們時獲得總和以及奇數/偶數整數。
此外,您不需要,long long因為輸入永遠不會變得那么大,除非您的意思是 10^5?
此外,每當您考慮提高性能時,您都應該查看大 O,在這種情況下O(N),它N是您擁有的整數數量。從演算法的角度來看,對于 N 輸入,您通常幾乎無法改進這一點。也許如果我們談論流,你可以做一些統計,但否則這個實作就很好了。在其他一些情況下,雖然最壞的情況無法改善,但我們可以改善平均情況,我認為這不適用于這里。
然后你應該看看分析代碼。這樣您就可以清楚地了解瓶頸在哪里。對于您的代碼,可能沒有太多可以合理完成的作業。
如果我們試圖盡可能提高性能,調整編譯器標志可以帶來一些性能提升。您應該研究這些,但我不會優先考慮上述問題。
我還會改進您命名變數的方式,但這對性能沒有影響。
uj5u.com熱心網友回復:
實際上,默認情況下,C cin/cout與 C 的 I/O 方式同步- printf/scanf,這大大減慢了 I/O。
切換到printf/scanf或添加類似ios::sync_with_stdio(0); main 開頭的內容應該會加快幾次。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/359139.html
