2014年省赛A组C++
A、猜年龄 数字条件判断
小明带两个妹妹参加元宵灯会。别人问她们多大了,她们调皮地说:“我们俩的年龄之积是年龄之和的6倍”小明又补充说:“她们可不是双胞胎,年龄差肯定也不超过8岁啊。”
请你写出:小明的较小的妹妹的年龄。
10:遍历找满足等式的年龄
int main(){
int i,j;
for (i=1;i<100;i++){
for (int j=i+1;j<=i+8;j++){
if (i*j==(i+j)*6){
//cout<<i<<" "<<j<<" "<<i*j<<" "<<(i+j)*6<<endl;
cout<<i<<endl;
break;
}
}
}
return 0;
}
B、切面条 数学题找规律
一根高筋拉面,中间切一刀可以得到2根面条;如果先对折1次中间切一刀,可以得到3根面条;如果连续对折2次,中间切一刀,可以得到5根面条。那么,连续对折10次,中间切一刀,会得到多少面条呢?
1025=2^10+1
C、神奇算式
由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。比如:
210x6=1260
8x473=3784
27x81=2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
12:分1位3位和2位2位的情况,用map去重并寻找
map<int,int> have;
//没有重复数字
bool legal(int x){
have.clear();
while (x){
if (have.find(x%10)==have.end())
have[x%10]=1;
else return false;
x/=10;
}
return true;
}
//乘积仍由这四个数字组成
bool issame(int x){
while (x){
if (have.find(x%10)!=have.end()){
if (have[x%10]==1) have[x%10]=0;//没用过
else return false; //数字用过
}
else return false; //不包含
x/=10;
}
return true;
}
int main(){
int cnt=0;
//1位数*3位数=4位数
for (int i=1;i<10;i++){
for (int j=100;j<1000;j++){
if (legal(j*10+i)){//该四位数各位不同
if (i*j>999 && i*j<10000 && issame(i*j)) cnt+=1;
}
}
}
//2位数*2位数=4位数
for (int i=10;i<100;i++){
for (int j=i;j<100;j++){//别重复数
if (legal(j*100+i)){//该四位数各位不同
if (i*j>999 && i*j<10000 && issame(i*j)) cnt+=1;
}
}
}
cout<<cnt;
return 0;
}