亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

1716 - 排列2

系統 1795 0

http://acm.hdu.edu.cn/showproblem.php?pid=1716

排列2

Time Limit: 1000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1948????Accepted Submission(s): 757


Problem Description
Ray又對數字的列產生了興趣:
現有四張卡片,用這四張卡片能排列出很多不同的4位數,要求按從小到大的順序輸出這些4位數。
?

?

Input
每組數據占一行,代表四張卡片上的數字(0<=數字<=9),如果四張卡片都是0,則輸入結束。
?

?

Output
對每組卡片按從小到大的順序輸出所有能由這四張卡片組成的4位數,千位數字相同的在同一行,同一行中每個四位數間用空格分隔。
每組輸出數據間空一行,最后一組數據后面沒有空行。
?

?

Sample Input
1 2 3 4
1 1 2 3
0 1 2 3
0 0 0 0
?
Sample Output
1234 1243 1324 1342 1423 1432
2134 2143 2314 2341 2413 2431
3124 3142 3214 3241 3412 3421
4123 4132 4213 4231 4312 4321
?
1123 1132 1213 1231 1312 1321
2113 2131 2311
3112 3121 3211
?
1023 1032 1203 1230 1302 1320
2013 2031 2103 2130 2301 2310
3012 3021 3102 3120 3201 3210
?
題目的目的是輸出數字的全排列,看似很簡單,但是這題讓我糾結了好長時間~~
首先輸出前排列時不能讓千位為0,然后要將相同的數字排除掉,比如:1 1 2 3時 1123和1123一樣~~然后就是輸出格式,換行問題。
剛開始我想用一個計數的變量,6個數字換一行,但是第二個樣例不符合,也就是當有相同數字時,每一行不一定是6個;后來我加了一個變量,每次輸出時判斷首位是否和上次輸出相同,相同則輸出空格,不同輸出換行~~(注意每行結尾不能先輸空格再換行,會PE~~~)最后還要注意輸入的兩組數據之間要空一行,但是最后一組數據不能有空行~~~
各種PE,郁悶死了....
          
             1
          
           #include<iostream>
          
2 #include<cstdio>
3 #include<cstring>
4 using namespace std;
5 int c[ 4 ], s[ 4 ], flag, begin;
6 int cmp( const void *a, const void *b)
7 {
8 return *( int *)a - *( int *)b;
9 }
10 void get_next( int cur, int n)
11 {
12 if (cur == n)
13 {
14 if (s[ 0 ] == 0 )
15 return ;
16 if (flag != s[ 0 ])
17 {
18 flag = s[ 0 ];
19 putchar( 10 );
20 }
21 else if (begin)
22 begin = 0 ;
23 else if (!begin)
24 putchar( ' ' );
25 for ( int i = 0 ; i < 4 ; i++)
26 {
27 printf( " %d " , s[i]);
28 }
29 return ;
30 }
31 for ( int i = 0 ; i < 4 ; i++)
32 if (!i || c[i] != c[i- 1 ])
33 {
34 int c1, c2;
35 c1 = c2 = 0 ;
36 for ( int j = 0 ; j < cur; j++)
37 if (s[j] == c[i])
38 c1++;
39 for (j = 0 ; j < n; j++)
40 if (c[i] == c[j])
41 c2++;
42 if (c1 < c2)
43 {
44 s[cur] = c[i];
45 get_next(cur+ 1 , n);
46 }
47 }
48 }
49 int main()
50 {
51 scanf( " %d%d%d%d " , &c[ 0 ], &c[ 1 ], &c[ 2 ], &c[ 3 ]);
52 if (c[ 1 ] || c[ 2 ] || c[ 3 ] || c[ 0 ])
53 {
54 qsort(c, 4 , sizeof ( int ), cmp);
55 for ( int i = 0 ; c[i] == 0 ; i++);
56 flag = c[i];
57 begin = 1 ;
58 get_next( 0 , 4 );
59 putchar( 10 );
60 }
61 else return 0 ;
62 while (scanf( " %d%d%d%d " , &c[ 0 ], &c[ 1 ], &c[ 2 ], &c[ 3 ]))
63 {
64 if (c[ 1 ] || c[ 2 ] || c[ 3 ] || c[ 0 ])
65 {
66 putchar( 10 );
67 qsort(c, 4 , sizeof ( int ), cmp);
68 for ( int i = 0 ; c[i] == 0 ; i++);
69 flag = c[i];
70 begin = 1 ;
71 get_next( 0 , 4 );
72 putchar( 10 );
73 }
74 else break ;
75 }
76 return 0 ;
77 }

1716 - 排列2


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲毛片 | 亚洲香蕉在线观看 | 色综合中文 | 天天干天天玩 | 精品福利在线观看 | 国产亚洲欧美在在线人成 | 日韩欧美中文字幕一区 | 看免费一级片 | 国产亚洲欧美日韩综合另类 | 亚洲色视频在线播放网站 | 最刺激黄a大片免费观看下截 | 久久香蕉影视 | 久久国产免费一区二区三区 | 亚洲水蜜桃久久综合网站 | 日本一级毛片a免费播放 | 在线亚洲欧洲国产综合444 | 乱人伦中文视频在线 | 国产精品视频ccav | 九九精品久久久久久噜噜 | 久久香蕉国产线看观看乱码 | 亚洲最大黄色网址 | 97精品国产91久久久久久 | 四虎国产精品免费久久影院 | 日韩大乳视频中文字幕 | 成人久久18免费网址 | 色插视频 | www天天操| 老司机免费福利影院 | 奇米影视播放器 | 日韩久久精品一区二区三区 | 免费看成人毛片 | 久久99精品视频 | 成熟热自由日本语亚洲人 | 日韩一区二区三区在线免费观看 | 中文字幕在线观看亚洲日韩 | 国产午夜久久精品 | 婷婷的久久五月综合先锋影音 | 四虎国产精品永久地址99 | 国产伦精品一区二区三区在线观看 | 欧美日韩不卡中文字幕在线 | 中文偷拍视频在线观看 |