練習題:馬虎的算式 兩個error
阿新 • • 發佈:2018-03-19
oid 不同的 gpo log 結果 == clas 兩個 一次
程序代碼:
#include<stdio.h>
const int N = 9;
int num;
void (int *p,int idx)
{
int t;
if(idx == 5)
{
if((p[0]*10 + p[1])*(p[2]*100 + p[3]*10 + p[4]) == (p[0]*100 + p[3]*10 + p[1])*(p[2]*10 + p[4]))
num++;
return;
}
for(int i = idx;i < N;i++)
{
t = p[i],p[i] = p[idx],p[idx] = t;
f(p,idx + 1 );
t = p[i],p[i] = p[idx],p[idx] = t;
}
}
int main()
{
int a[N];
for(int i = 0;i < N;i++)
a[i] = i+1;
f(a,0);
printf("%d\n",num);
return 0;
}
題目描述:
小明是個急性子,上小學的時候經常把老師寫在黑板上的題目抄錯了。
有一次,老師出的題目是:36 x 495 = ?
他卻給抄成了:396 x 45 = ?
但結果卻很戲劇性,他的答案竟然是對的!!
因為 36 * 495 = 396 * 45 = 17820
類似這樣的巧合情況可能還有很多,比如:27 * 594 = 297 * 54
假設 a b c d e 代表1~9不同的5個數字(註意是各不相同的數字,且不含0)
能滿足形如: ab * cde = adb * ce 這樣的算式一共有多少種呢?
請你利用計算機的優勢尋找所有的可能,並回答不同算式的種類數。
滿足乘法交換律的算式計為不同的種類,所以答案肯定是個偶數。
代碼如下:
const int N = 9;
int num;
void (int *p,int idx)
{
int t;
if(idx == 5)
{
if((p[0]*10 + p[1])*(p[2]*100 + p[3]*10 + p[4]) == (p[0]*100 + p[3]*10 + p[1])*(p[2]*10 + p[4]))
num++;
return;
}
for(int i = idx;i < N;i++)
{
t = p[i],p[i] = p[idx],p[idx] = t;
f(p,idx + 1
t = p[i],p[i] = p[idx],p[idx] = t;
}
}
int main()
{
int a[N];
for(int i = 0;i < N;i++)
a[i] = i+1;
f(a,0);
printf("%d\n",num);
return 0;
}
練習題:馬虎的算式 兩個error