第二章 循环结构程序设计
第二章
- 筆記
- aabb
- 階乘之和
- 水仙花數
- 韓信點兵
- 倒三角形
- 子序列的和
- 分數化小數
- 排列
- 擴展
筆記
1、函數 double floor(double x) 向下取整,返回不超過x的最大整數;函數 double ceil(double x) 向上取整,返回不小于x的最小整數。若給定的數為整數,則返回該整數。按理說返回的是整數,函數類型應該是int ,但據codeblocks提示,函數類型為double 。頭文件 math.h
2、為減少浮點數運算帶來的誤差,一般改成四舍五入,即floor(x+0.5)。
【floor(x)等于1的區間是[1,2),而floor(x+0.5)等于1的區間為[0.5,1.5) 】
3、int 的取值范圍為-2147483648~2147483647【>109,<1010】
?long long 的最大值:-9223372036854775808~9223372036854775807【>1018,<1019】
4、要計算只包含加法、減法和乘法的整數表達式除以正整數n的余數,可以在每步計算后對n取余,結果不變。
5、25!末尾有6個0
aabb
輸出所有形如aabb的4位完全平方數(即前兩位數字相等,后兩位數字也相等)。
【若一個數能表示成某個整數的平方的形式,則稱這個數為完全平方數】
也可以使用枚舉法,避免開平方操作
//解法二:枚舉 #include<bits/stdc++.h> using namespace std; int main() {int n;for(int x=1;n<=9999;x++){n=x*x;if(n<1000)continue;int a=n/100;int b=n%100;if(a/10==a%10&&b/10==b%10)printf("%d\n",n);}return 0; }階乘之和
輸入n,計算s=1!+ 2!+ 3!+…+n!的末6位(不含前導0)。n<=106,n!表示前n個正整數之積。
樣例輸入:
10
樣例輸出:
37913
25!的末尾有6個0,所以從第5項開始,后面的所有項都不會影響和的末6位數字,因此可以在程序中加一句 if(n>25)n=25;這樣就不存在溢出問題了。【在該程序中,當n=25時,sum=940313】
水仙花數
輸出100~999中的所有水仙花數。若三位數ABC滿足ABC=A3+B3+C3,則稱其為水仙花數。例如:153=13+53+33
#include<bits/stdc++.h> using namespace std; int main() {for(int i=00;i<=999;i++){int sum=0;for(int j=i;j!=0;j/=10){sum+=(j%10)*(j%10)*(j%10);//使用pow函數會出錯}if(i==sum)cout<<i<<endl;} }韓信點兵
題意:有n個士兵(10<=n<=100),3人一排余a人,5人一排余b人,7人一排余c人。問n等于多少?
輸入a,b,c的值;
輸出n的值。
樣例輸入:
2 1 6
2 1 3
樣例輸出:
41
No answer
中國剩余定理:
在《孫子算經》中有這樣一個問題:“今有物不知其數,三三數之剩二(除以3余2),五五數之剩三(除以5余3),七七數之剩二(除以7余2),問物幾何?”這個問題稱為“孫子問題”,該問題的一般解法國際上稱為“中國剩余定理”。具體解法分三步:
(1)找出三個數:從3和5的公倍數中找出除7余1的最小數15,從3和7的公倍數中找出除5余1 的最小數21,最后從5和7的公倍數中找出除3余1的最小數70。
(2)用15乘以2(2為最終結果除以7的余數),用21乘以3(3為最終結果除以5的余數),同理,用70乘以2(2為最終結果除以3的余數),然后把三個乘積相加15?2+21?3+70?2得到和233。
(3)用233除以3,5,7三個數的最小公倍數105,得到余數23,即233%105=23。這個余數23就是符合條件的最小數。
倒三角形
題意:輸入n,輸出一個n層的倒三角形。
樣例輸入:
5
樣例輸出:
子序列的和
題意:輸入兩個正整數n<m<106,輸出1/n2+1/(n+1)2+…1/m2,保留5位小數。輸入包含多組數據,結束標記為n=m=0。
樣例輸入:
2 4
65536 655360
樣例輸出:
Case 1:0.42361
Case 2:0.00001
分數化小數
輸入正整數a,b,c,輸出a/b的小數形式,精確到小數點后c位。a,b<=106,c<=100。輸入包含多組數據,結束標記為a=b=c=0。
樣例輸入:
1 6 4
0 0 0
樣例輸出:
Case 1: 0.1667
因為c<100,所以不能用double來存儲輸出結果
排列
用1,2,3,…,9組成一個3位數abc,def,ghi,每個數字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abc def ghi”的格式輸出所有解,每行一個解。
#include<bits/stdc++.h> using namespace std; int main() {int a[10];for(int i=123; i<=329; i++)//abc最小為123,最大為987/3==329{int sum=0;memset(a,0,sizeof(a));int j=2*i,k=3*i;//使用的數對應位置為1,否則為0a[i/100]=a[(i%100)/10]=a[i%10]=1;a[j/100]=a[(j%100)/10]=a[j%10]=1;a[k/100]=a[(k%100)/10]=a[k%10]=1;for(int m=1; m<=9; m++)sum+=a[m];if(sum==9)//都使用過了一次cout<<i<<" "<<j<<" "<<k<<endl;}return 0; }擴展
1:中國剩余定理:POJ 1006–Biorhythms
2:求一個數的階乘末尾有多少個連續的零。【題解:點這里查看解析】
代碼:
參考資料:
【1】博客:https://www.cnblogs.com/chichu-chen/p/10126864.html
【2】博客:中國剩余定理
總結
以上是生活随笔為你收集整理的第二章 循环结构程序设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FIIL为什么周一到周五晚上九点就会报警
- 下一篇: Python学习笔记--函数