[NOIP1998] 普及组
三连击
题目描述
将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数。
输入输出格式
输入格式:
木有输入
输出格式:
若干行,每行3个数字。按照每行第一个数字升序排列。
输入输出样例
输入样例#1:
输出样例#1:
192 384 576 * * * ... * * * (输出被和谐了)
三重循环暴力枚举数字即可。
其实也可以枚举第一个数字,按照比例算其他两个数字。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 bool bo; 6 int main(){ 7 int a[10]={0}; 8 int i,j,k=0; 9 bool bo;bo=true; 10 for(i=123;i<=333;i++){ 11 a[1]=i/100; 12 a[2]=i/10%10; 13 a[3]=i%10; 14 a[4]=i*2/100; 15 a[5]=i*2/10%10; 16 a[6]=i*2%10; 17 a[7]=i*3/100; 18 a[8]=i*3/10%10; 19 a[9]=i*3%10; 20 bo=true; 21 for(j=1;j<=8;j++) 22 for(k=j+1;k<=9;k++) 23 if(a[j]==a[k]||a[j]==0||a[k]==0) bo=false; 24 if(bo==true){ 25 cout<<a[1]<<a[2]<<a[3]<<" "<<a[4]<<a[5]<<a[6]<<" "<<a[7]<<a[8]<<a[9]<<endl; 26 } 27 //for(j=1;j<=9;j++) cout<<a[j]; //test 28 29 30 } 31 return 0; 32 }
阶乘之和
题目描述
用高精度计算出S=1!+2!+3!+…+n!(n≤50)
其中“!”表示阶乘,例如:5!=5*4*3*2*1。
输入输出格式
输入格式:
一个正整数N。
输出格式:
一个正整数S,表示计算结果。
输入输出样例
输入样例#1:
3
输出样例#1:
9
裸高精乘
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int a[1000]={0}; 5 int b[1000]={0}; 6 int N=0; 7 int la=1,lb=1; 8 void plu(int a[],int b[]){ 9 for(int i=1;i<=la||i<=lb;i++){ 10 a[i]+=b[i]; 11 if(a[i]>5&&a[i+1]==0) la++; 12 a[i+1]+=a[i]/10; 13 a[i]%=10; 14 } 15 } 16 void muti(int n){ 17 if(n>N) return; 18 int i; 19 for(i=1;i<=lb;i++) 20 b[i]*=n; 21 for(i=1;i<=lb;i++){ 22 if(b[i]>=10){ 23 if(b[i+1]==0) lb++; 24 b[i+1]+=b[i]/10; 25 b[i]%=10; 26 } 27 } 28 plu(a,b); 29 muti(n+1); 30 } 31 int main(){ 32 int n=0; 33 cin>>N; 34 b[1]=1; 35 muti(1); 36 while(a[la]==0&&la>1)la--; 37 for(int j=la;j>=1;j--) printf("%d",a[j]); 38 return 0; 39 }
幂次方
题目太长不放
递归处理
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 using namespace std; 7 8 int a[30]; 9 int dfs(int n) 10 { 11 //幂为0、1、2则直接输出,>=3则递归求解。 12 int i=0; 13 if(n!=0) 14 { 15 while(n>=a[i]) i++; i--; //找到最大的幂 16 n-=a[i];//下面12~20行是处理减去的这部分。 17 printf("2"); 18 if(i!=1)printf("(");//注意1次幂是2而不是2(1) 19 if( i==0 || i == 2 ) printf("%d)",i);//幂为0、1、2时可输出幂(幂1时无输出) 20 //如果幂>=3,对幂递归,不输出幂。 21 if(i>=3) {dfs(i);printf(")");}//递归求解,再添加右括号。 22 if(n!=0) {printf("+");dfs(n);}//子问题与子问题之间用+连接;处理剩余的n(子问题)。 23 } 24 return 0; 25 } 26 int main(void) 27 { 28 int i,n; 29 a[0]=1; 30 for(i=1;i<50;i++) 31 a[i]=a[i-1]*2; //a:1 2 4 8 16 32…… 32 scanf("%d",&n); 33 dfs(n); 34 return 0; 35 }
本文为博主原创文章,转载请注明出处。