nyoj 稍具技巧的題

2022-09-22 19:45:15 字數 3396 閱讀 3591

這題可以用中國剩餘定理(這個我不會),我用的只是從1到105逐個搜尋

[cpp]

#include 

using namespace std; 

int main() 

小明的調查作業 nyoj 48

此題根據規模進行,可以開乙個a的陣列,每讀乙個i,

就把a【i】賦值為true,然後遍歷輸出,重複計算問題,也挺省時間的。

[cpp]

#include 

#include 

using namespace std; 

int main() 

} cout<

for(int i=1;i<=1000;i++) 

if(vis[i]) 

cout<

cout<

return 0; 

} 數的長度 nyoj 69

此題有一種很準確的方法叫斯特林(stirling)公式;

還有一種也能行,不過數太大時就不是非常準確的方法:

for(int i=1;i<=m;i++)

num += log10(i);

就是對每個乘數取對數

[cpp] 

#include 

#include 

using namespace std; 

int main() 

return 0; 

} 房間安排 nyoj 168

用陣列a存放第i天中每天需要的房間數,讀房間數、天數,然後找出陣列中

最大的元素#include

int p = max_element(a, a+200)-a;

cout<

[cpp] 

#include 

#include 

#include 

using namespace std; 

int a[201];    //第i天的房間數  

int main() 

int p = max_element(a, a+200)-a; 

cout<

} return 0; 

} 素數 nyoj 169

主函式部分設計的很巧妙,先近後遠,距離相等的話先大後小

[cpp] 

#include 

using namespace std; 

bool fan(int a) 

} return b; 

} int main() 

} return 0; 

}       

字母統計 nyoj 241

此題類似重複計數,用乙個陣列儲存,然後用『a』+index;算是比較巧妙吧

[cpp] 

#include 

#include 

#include 

using namespace std; 

int num[26]; 

int main() 

int max = num[0]; 

int index = 0; 

for(int i=0;i<26;i++) 

} ch = 'a' + index; 

cout<

} return 0; 

} 16進製制的簡單運算 nyoj 244

傷心的**,我用c++寫了好長,人家兩句讀入輸出,換一下格式ok

scanf("%x%c%x", &a, &c, &b);

if(c == '+')

printf("%o\n", a+b);

if(c == '-')

printf("%o\n", a-b);

[cpp] 

#include 

#include 

using namespace std; 

int main() 

cout<

for(int i=oper+1;i

cout<

ch = str.at(oper); 

if(ch == '+') 

else if(ch == '-') 

cout<

str = ""; 

while(num1) 

string s(str.rbegin(),str.rend()); 

cout << s <

} return 0; 

} [cpp] 

#include 

#include 

using namespace std; 

int main() 

return 0; 

} 荷蘭國旗問題 nyoj 268

用三個數分別記下三個字母出現的次數,然後依序輸出就行了,他們提供的最優**也是這樣寫的

[cpp] 

#include 

#include 

using namespace std; 

int main() 

else if(s1.at(i) == 'w') 

b++; 

else 

c++; 

} for(int i=0;i

cout<

for(int i=0;icout<

for(int i=0;i

cout<

cout<

} return 0; 

} 正三角形的外接圓面積 nyoj 274

看乙個叫做「寶」的仁兄的**,我覺得很好,收集一下:

[cpp] 

#include  

using namespace std; 

#define pi 3.1415926 

int main() 

return 0; 

}  算菜價 nyoj 316

還是「寶」兄的**,不過這次他用了c

[cpp] 

#include 

int main() 

printf("%.1lf\n",sum); 

return 0; 

}    

小光棍數 nyoj 458

第乙個光棍數是471,第二個是1000+471,第三個是2000+471,總之是1000的整倍數加471(我不會證明。。。。)

[cpp] 

#include 

using namespace std; 

int main() 

return 0; 

} www.2cto.com

[cpp] 

#include 

#include 

using namespace std; 

int main() 

return 0; } 0

作者:slience_perseverance

位運算的技巧題

位運算非常的巧妙,有時會讓題目的解法非常簡單,但是其技巧性很強,因此這裡自己將一些關於位運算的題目進行了總結。此題的範圍為int32內。因為不能用比較運算,自然的想到位運算,如下的一種常規的解法。1.計算c a b判斷c的正負 2.n 31 1 1 則說明n為負數,否則為正數 int flip in...

nyoj 1170 最大的數(數學技巧)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 小明和小紅在打賭說自己數學學的好,於是小花就給他們出題了,考考他們誰nb,題目是這樣的給你n個數 在這n個數之間新增n 1個 或 使結果最大,但不可以打亂原順序,請得出這個結果 如1 3 5 結果是 1 3 5 20 最大 可以...

nyoj 84 階乘的0(數學技巧)

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 計算n 的十進位制表示最後有多少個0 輸入第一行輸入乙個整數n表示測試資料的組數 1 n 100 每組測試資料佔一行,都只有乙個整數m 0 m 10000000 輸出輸出m的階乘的十進位制表示中最後0的個數 比如5 120則最後...