由4個不同的數字,組成的乙個乘法算式,它們的乘積仍然由這4個數字組成。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果滿足乘法交換律的算式算作同一種情況,那麼,包含上邊已列出的3種情況,一共有多少種滿足要求的算式。
請填寫該數字,通過瀏覽器提交答案,不要填寫多餘內容(例如:列出所有算式)。
四位數組成的乘式,只能是一位數乘以三位數和兩位數乘以兩位數這兩種情況,然後看四位數是不是都能在乘積結果中找到。
對於查詢的話,可以用字串的查詢函式s.find(i)!==string::npos。所以需要把乘積結果通過stringstream轉換為字串。需要i+'0』將數字轉化成字元。(是npos,之前拼寫有錯,吃了虧。。。)
而且題目有說四位數字互不相同,所以要判斷互不相同
//#include
#include
#include
#include
using
namespace std;
//將乘積結果轉換為字串,stringstream
string i2s
(int i)
int count=0;
void
isolve1
(int i,
int j,
int k,
int l)
}void
isolve2
(int i,
int j,
int k,
int l)
}int
main()
cout
}
要把乙個多位數看出多個位的單位數組成,用
for
(int i=
1;i<=
9;i++
)for
(int j=
0;j<=
9;j++
)for
(int k=
0;k<=
9;k++
)for
(int l=
0;l<=
9;l++
)set
<
int>
::iterator it;
if(e.count(i)==1
&&e.count(j)==1
&&e.count(k)==1
&&e.count(l)==1
)return true;
else
return false;
}int main(
) b=
(i*10
+j)*(10
*k+l)
;// 兩位數相乘的時候要加if
(a>=b)
,這樣子可以減少重複
//if
(b>
1000
&&check(i,j,k,l,b))if
(b>
1000&&
(i*10
+j)>(10
*k+l)
&&check(i,j,k,l,b)
)// !!前面已經有一位數乘以三位數,這裡再來三位數乘以一位數,必定會重複,乘法交換律
//c=
(i*100
+j*10
+k)*l;
//if
(c>
1000
&&check(i,j,k,l,c))//
}}set<
int>
::iterator it;
for(it=st.begin(
);it!=st.end(
);it++)
cout/12?
//cout<1,0,
6,1206
)
}
個人覺得法2 比較蠢。。。用法2 要注意set集合裡是直接忽略重複的值,所以有些
6 * 210 = 1260
60 * 21 = 1260
兩個結果是一樣的,而放入set裡面的又是乘積,並非整個式子,所以存在被排除的情況。
兩位數相乘的時候去重複,可加個if(a>=b)。
三位數和一位數相乘,只寫一種,不需要三位數* 一位數和一位數 * 三位數都羅列,會重複。
注意題目說四位數不同,必定需先判斷各不相同 。
法2中用來判斷四個數在乘積中有且只出現過一次,不是0次的方法是if(e.count(i)==1&&e.count(j)==1&&e.count(k)==1&&e.count(l)==1)。因為前面已經保證i,j,k,l四個數不同了。所以這樣子一定能檢驗乘積得到的四位數是不是由四個不同的數組成,且每個數都與i,j,k,l
比賽過程中,如果不相信自己是否做對,沒有把握的,可以列印出過程來檢驗一下,在有些情況下是有用的。。。
藍橋杯填空題(一)
以下 可以從陣列a中找出第k小的元素。它使用了類似快速排序中的分治演算法,期望時間複雜度是o n 的。請仔細閱讀分析原始碼,填寫劃線部分缺失的內容。include int quick select int a,int l,int r,int k int i l,j r while i j while...
藍橋杯填空題 剪郵票
如下面第一張圖,有12張連在一起的12生肖的郵票。現在你要從中剪下5張來,要求必須是連著的。僅僅連線乙個角不算相連 具體例子比如第二張,第三張圖中,粉紅色所示部分就是合格的剪取。請你計算,一共有多少種不同的剪取方法。思路 先找到5個數的組合,然後從第乙個數字開始遍歷,經過上下左右操作檢測5個數是否都...
藍橋杯填空題 獎券數目
有些人很迷信數字,比如帶 4 的數字,認為和 死 諧音,就覺得不吉利。雖然這些說法純屬無稽之談,但有時還要迎合大眾的需求。某 活動的獎券號碼是5位數 10000 99999 要求其中不要出現帶 4 的號碼,主辦單位請你計算一下,如果任何兩張獎券不重號,最多可發出獎券多少張。思路 迴圈遍歷每一位數字的...