日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第二章 循环结构程序设计

發布時間:2024/9/30 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第二章 循环结构程序设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第二章

  • 筆記
  • 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() {for(int a=1;a<=9;a++)for(int b=0;b<=9;b++){int n=a*1100+b*11; //構造aabb數int m=floor(sqrt(n)+0.5); //減少浮點運算帶來的誤差if(m*m==n) cout<<n<<endl;}return 0; }

也可以使用枚舉法,避免開平方操作

//解法二:枚舉 #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

#include<bits/stdc++.h> using namespace std; const int mod=1000000; int main() {int n,sum=0;cin>>n;for(int i=1;i<=n;i++){int factorial=1; for(int j=1;j<=i;j++){factorial=(factorial*j)%mod;}sum=(sum+factorial)%mod;}cout<<sum; }

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

//解法一:枚舉 #include<bits/stdc++.h> using namespace std; int main() {int a,b,c;while(cin>>a>>b>>c){int i=10;for(i=10; i<=100; i++){if(i%3==a&&i%5==b&&i%7==c){cout<<i<<endl;break;}}if(i==101)cout<<"NO answer"<<endl;} }

中國剩余定理:

在《孫子算經》中有這樣一個問題:“今有物不知其數,三三數之剩二(除以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就是符合條件的最小數。

//解法2:剩余定理 //特征數:15 21 70 #include<bits/stdc++.h> using namespace std; int main() {int a,b,c,num;while(cin>>a>>b>>c) {num=(15*c+21*b+70*a)%105;if(num<=100&&num>=10)cout<<num<<endl;elsecout<<"No answer"<<endl;} }

倒三角形

題意:輸入n,輸出一個n層的倒三角形。

樣例輸入:
5
樣例輸出:

######################### #include<bits/stdc++.h> using namespace std; int main() {int n;cin>>n;for(int i=1;i<=n;i++){for(int k=1;k<=i-1;k++)//空格{cout<<" ";}for(int j=1;j<=2*n-1-2*(i-1);j++)//#號{cout<<"#";}cout<<endl;} }

子序列的和

題意:輸入兩個正整數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

#include<bits/stdc++.h> using namespace std; int main() {int n,m;int counter=0;while(cin>>n>>m&&(n+m)){counter++;double sum=0;for(int i=n;i<=m;i++){sum+=1.0/i/i; //此處使用sum+=1.0/(i*i)會溢出}printf("Case %d:%.5f\n",counter,sum);} }

分數化小數

輸入正整數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來存儲輸出結果

#include<bits/stdc++.h> using namespace std; void Div(int a, int b, int c) {int k, i;printf("%d.",a/b);//輸出整數部分跟小數點k = a;for(i = 0; i < c-1; i++){k = (k%b)*10;cout<<k/b;}k = (k%b)*10;if((k%b)*10/b >= 5)//四舍五入 cout<<k/b + 1<<endl;elsecout<<k/b<<endl; }int main() {int a, b, c;while(cin>>a>>b>>c&&(a||b||c)){Div(a, b, c);} }

排列

用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:求一個數的階乘末尾有多少個連續的零。【題解:點這里查看解析】
代碼:

#include<bits/stdc++.h> using namespace std; int main() {int n;cin>>n;int count = 0;while{n = n/5;if (n == 0) {break;} else {count += n;}}cout<<count<<endl; }

參考資料:
【1】博客:https://www.cnblogs.com/chichu-chen/p/10126864.html
【2】博客:中國剩余定理

總結

以上是生活随笔為你收集整理的第二章 循环结构程序设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。