這題算是自己系統學習暴力求解法做的第一道題。總結如下:
1.在付諸於實踐之前,將問題進行分析,有利於使暴力求解不單單只是暴力,還有點巧勁。
2.如一道題中有多個物件,要選取合適的物件(如範圍好確定的,能乘法的不用除法等),確定其列舉範圍,通過它來求解其他物件。
3.列舉目前遇到的兩種思路:
1)生成—測試法:將列舉的範圍擴大,再對求解出的東西進行測試看是否滿足要求。適用於在列舉範圍不好縮小得正正好的情況。
2)測試—生成法:就在列舉範圍中處理(所謂測試,即測試是否在列舉範圍中,與上面不同)。
在本題中,使用第二種很難,因為不好控制abcde和fghij是0~9的全排列。
#include
#include
using
namespace
std;
const
int maxn=10000000000;
int main()
bool legal=true;
for(int i=1;i<10;i++) if(number[i]!=1)
if(number[0]!=1&&number[0]!=0) legal=false;
if(!legal) continue;
solution=true;
if(number[0]==0) sprintf(sequence,"%d%s%d%d%s%d",abcde," / ",0,fghij," = ",n);
else
sprintf(sequence,"%d%s%d%s%d",abcde," / ",fghij," = ",n);
printf("%s\n",sequence);
}if(!solution) printf("there are no solutions for %d.\n",n);
cnt++;
}}
注意點:
1.sprintf的用法
2.是99999(上面的98765),不是9999
例題7 1 UVA 725 Division除法
思路不太好,借鑑一下吧 整體思路 分析可知第乙個數肯定是個五位數,第二位要麼是五位數,要麼是四位數,所以呢,第乙個迴圈直接掃第乙個五位數,從10000掃到99999只有當五個數字各不相同,並且通過除法算出第二個數,判斷兩個數各個數字都不相同即可輸出 include includeusing name...
uva 725 簡單列舉
題目大意 按從小到大的順序輸出所有形如abcde fghij n的表示式,其中a j卡位數字0 9的乙個排列,含前導0.解題思路 除數,被除數都是5位數,把fghij從1234開始列舉一直到98765,那麼abcde就是它乘以n,每一組輸出間加乙個換行。include include include...
7 1 除法(UVa725)《選擇合適的列舉物件》
如果把數字0到9分配成2個整數 各五位數 現在請你寫一支程式找出所有的配對使得第乙個數可以整除第二個數,而且商為n 2 n 79 也就是 abcde fghijk n 這裡每個英文本母代表不同的數字,第乙個數字可以為0。input 輸入包含許多筆待測資料,每列代表一筆待測資料,每筆待測資料報含乙個正...