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