阮小二买彩票
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 算法提高 阮小二買彩票
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 時間限制:?1 Sec??內存限制:?512 MB
題目描述
在同學們的幫助下,阮小二是變的越來越懶了, 連算賬都不愿意自己親自動手了,每天的工作就是坐在電腦前看自己的銀行賬戶的錢是否有變多。可是一段時間觀察下來,阮小二發現自己賬戶的錢增長好慢啊,碰 到節假日的時候連個銅板都沒進,更郁悶的是這些天分文不進就算了,可恨的是銀行這幾天還有可能“落井下石”(代扣個人所得稅),看著自己賬戶的錢被負增長 了,阮小二就有被割肉的感覺(太痛苦了!),這時阮小二最大的愿望無疑是以最快的速度日進斗金,可什么方法能夠日進斗金呢?搶銀行(老本行)?不行,太危 險,怕有命搶沒命花;維持現狀?受不了,摟錢太慢了!想來想去,抓破腦袋之后,終于想到了能快速發家致富的法寶----買彩票,不但掙了錢有命花,運氣好 的話,可以每天中他個幾百萬的,豈不爽哉!抱著這種想法,阮小二開始了他的買彩票之旅。想法是“好的”(太天真了OR?太蠢了),可是又發現自己的數學功底太差,因為不知道數字都有哪些組合排列?那現在就請同學們寫個遞歸程序,幫助阮小二解決一下這個問題吧!
輸入
不超過6位數的正整數N,注意:構成正整數N的數字可重復
輸出
組成正整數N的所有位數的全排列,這些排列按升序輸出,每個排列占一行。
樣例輸入 123
樣例輸出
123 132 213 231 312 321提示
來源
思路
首先是將所給的數字全排列,然后再將所有數字升序排列輸出即可,我用到了遞歸與回溯。
#include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> using namespace std; int b[1000],j=0; int f(char a[],int k,int len) {char t;if(k==(len-1)){int s=0;for(int i=0;i<len;i++)s=s*10+a[i]-'0';b[++j]=s;}for(int i=k;i<len;i++){t=a[i];a[i]=a[k];a[k]=t;//試探f(a,k+1,len);t=a[i];a[i]=a[k];a[k]=t;//回溯} } int main() {char a[10];int len;cin>>a;b[0]=-1;len=strlen(a);f(a,0,len);sort(b,b+j+1);for(int i=1;i<=j;i++)if(b[i]!=b[i-1]){if(len==2)printf("%02d\n",b[i]);else if(len==3)printf("%03d\n",b[i]);else if(len==4)printf("%04d\n",b[i]);else if(len==5)printf("%05d\n",b[i]);else if(len==6)printf("%06d\n",b[i]);else if(len==1)printf("%01d\n",b[i]);}return 0; }
總結
- 上一篇: 运用Chrome浏览器ADB插件获取页面
- 下一篇: Win10 批量修改文件名