日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

22行代码AC——例题7-1除法(Division UVa 725)——解题报告

發布時間:2024/2/28 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 22行代码AC——例题7-1除法(Division UVa 725)——解题报告 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

勵志用盡量少的代碼做高效的表達


題目(提交)鏈接→UVa-725


題目大意:

0-9不重復的組成兩個5位數,如果數A/數B=n,則為可行解。

思路分析:

本題實質是通過巧妙分析的暴力求解法。
下等解法:直接枚舉0-9的全排列,枚舉量為10!,效率極低。
中等解法:在下等解法的基礎上思考,如果我們只遍歷一個數的5位,判斷該數*n是否小于10W且兩個數中各位是否重復,則最大只需遍歷10^5次。
上等解法:在中等解法的基礎上思考,除數最大不會超過100000/n,最小為1234,則遍歷范圍就縮減為 1234 <= i <= 100000/n。
注意:
1、最后可采用域寬填充0的方法輸出前導0。
2、使用紅黑二叉樹set的去重原理巧妙判斷數字是否重復出現。


代碼:

#include<bits/stdc++.h> using namespace std; int main() {int n, num = 0; //num判斷最后一個輸出結果后有無空格 while((scanf("%d", &n) == 1) && n) {if(num != 0) printf("\n"); num++; //連續的測試用例間需有空行bool flag1 = false; for(int i = 1234; i < (100000/n+1); i++) //縮小范圍 if((i * n) < 100000) {int i1 = i, i2 = i * n; //分別為除數、被除數 set<int>s;for(int k = 0; k < 5; k++ ) {s.insert(i1%10); i1 /= 10; s.insert(i2%10); i2 /= 10;}if(s.size() == 10) {printf("%05d / %05d = %d\n", i*n, i, n); flag1 = true;} }if(!flag1) printf("There are no solutions for %d.\n", n);}return 0; }

擇苦而安,擇做而樂,虛擬現實終究比不上真實精彩之萬一。

總結

以上是生活随笔為你收集整理的22行代码AC——例题7-1除法(Division UVa 725)——解题报告的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。