1、無重複的三位數c++
編程求:用1.2.3.4共4個數字組成的互不相同且無重複數字的三位數以及個數git
※1)枚舉、排列組合問題編程
2)效率改進點:依次枚舉三位數字(三層循環),若前兩位相同則無需進入第三層循環code
源代碼:blog
#include <stdio.h> #include <math.h> int main() { int i,j,k; int num=0; for(i=1;i<=4;i++) { for(j=1;j<=4;j++) { for(k=1;k<=4 && i!=j;k++) { if(i!=k && j!=k) { printf("%d%d%d ",i,j,k); num++; if(num%8==0) //控制每8個數字換一行 printf("\n"); } } } } printf("能組成的三位數個數爲:%d\n",num); return 0; }
2、勾股數three
求100之內的全部勾股數(即能構成直角三角形三條邊的三個正整數)it
※1)根據勾股定理,a^2+b^2=c^2,且要求a<b<c,a+b>c,a+c>b,b+c>aio
2)枚舉a b c三個數,輸出符合要求的組合ast
源代碼:class
法一:依次遍歷abc,知足a<b<c
#include <stdio.h> int main() { int a,b,c; int num=0; for(a=1;a<=100;a++) { for(b=a+1;b<=100;b++) { for(c=b+1;c<=100;c++) { if(a*a+b*b==c*c && a+b>c && a+c>b && b+c>a) { printf("%4d-%4d-%4d ",a,b,c); num++; if(num%4==0) printf("\n"); } } } } printf("勾股數總對數:%d\n",num); return 0; }
#include <stdio.h> #include <math.h> int main() { int a,b,c,pow; int num=0; for(a=1;a<=100;a++) { for(b=a+1;b<=100;b++) { pow=a*a+b*b; c=(int)sqrt(pow); if(c*c==a*a+b*b && a+b>c && a+c>b && b+c>a && c<=100) { printf("%d %d %d\n",a,b,c); num++; } } } printf("勾股數總對數:%d\n",num); return 0; }
3、阿姆斯特朗數
若是一個整數等於其各個數字的立方和,則稱該數爲「阿姆斯特朗數」(例:153=1^3+5^3+3^3,是一個「阿姆斯特朗數」)。輸入n,編程求n之內的全部「阿姆斯特朗數」
※分離各位數字:求餘與整除的綜合運用
源代碼:
#include <stdio.h> #include <math.h> int main() { int i,t,sum; int n; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) { t=i,sum=0; while(t>0) { sum+=(pow((t%10),3)); t/=10; } if(i==sum) printf("%d\n",i); } } return 0; }
4、高次方程的尾數
求x的y次方的最後三位數
※1)考慮精度問題及題目要求,無需將x的y次方具體值求出
2)乘積最後三位的值至於乘數和被乘數後三位有關,所以在計算下一次乘積時,只需用上一次的結果後三位(某數 mod 1000)
源代碼:
#include <stdio.h> int main() { int i,x,y; int last=1; //last保存累乘結果 while(scanf("%d %d",&x,&y)!=EOF) { for(i=1;i<=y;i++) { last=last*x%1000; //下一次相乘前先截取last的後三位再相乘 printf("%d\n",last); } printf("The last three digits are: %d\n\n",last); } return 0; }