1. 程式人生 > >hpuoj 1005: C語言考試練習題_排列【dfs】

hpuoj 1005: C語言考試練習題_排列【dfs】

C語言考試練習題_排列

題目描述

有4個互不相同的數字,輸出由其中三個不重複數字組成的排列。

輸入

4個整數。

輸出

所有排列。

樣例輸入

1 2 3 4

樣例輸出

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
1 2 4
1 4 2
2 1 4
2 4 1
4 1 2
4 2 1
1 3 4
1 4 3
3 1 4
3 4 1
4 1 3
4 3 1
2 3 4
2 4 3
3 2 4
3 4 2
4 2 3
4 3 2


本來是不打算貼上來的,感覺自己做的太水了,但是覺得這個題還是很好的,雖然打的是全排列,但是輸出的格式不是正常的格式,這樣需要在深搜之前先處理一下,比如改變裡面的值,反正,我現在還沒想到不多次使用 dfs 怎麼處理這個問題.......

#include<stdio.h> 
#include<string.h> 
int vis[5],x[10],y[10],s[10]; 
void dfs(int v) 
{ 
    if(v==3) //控制個數
    { 
        int i; 
        for(i=0;i<2;++i) //輸出控制
        { 
            printf("%d ",x[i]); 
        } 
        printf("%d\n",x[i]); //注意格式
        return; 
    } 
    for(int i=0;i<3;++i) //迴圈儲存數組裡的資料.
    { 
        if(!vis[i]) 
        { 
            vis[i]=1; 
            x[v]=s[i]; 
            dfs(v+1); 
            vis[i]=0; 
        } 
    } 
} 
int main() 
{ 
    int i,j,k; 
    while(~scanf("%d",&y[0])) 
    { 
        for(i=1;i<4;++i) 
        { 
            scanf("%d",&y[i]); 
        } 
        k=4; 
        while(k--) 
        { 
            for(i=0,j=0;j<3;++i) //改變需要處理的陣列內部的值
            { 
                if(i!=k) 
                { 
                    s[j++]=y[i]; 
                } 
            } 
            dfs(0); //列印全排列
        } 
        printf("\n"); 
    } 
    return 0; 
}  
/************************************************************** 
    Problem: 1005 
    User: 311409010319 
    Language: C++ 
    Result: 正確 
    Time:0 ms 
    Memory:816 kb 
****************************************************************/ 


相關推薦

hpuoj 1005: C語言考試練習題_排列dfs

C語言考試練習題_排列 題目描述 有4個互不相同的數字,輸出由其中三個不重複數字組成的排列。 輸入 4個整數。 輸出 所有排列。 樣例輸入 1 2 3 4 樣例輸出 1 2 3

1004: C語言考試練習題_排列

題目 Description 有四個互不相同的數字,輸出由其中三個不重複數字組成的排列 Input 4個整數。 Output 所有排列。 Sanmple Input 1 2 3

C語言考試練習題_一元二次方程

#include <stdio.h> #include <stdlib.h> #include <math.h> int main() {     float a = 0, b = 0,c = 0;     fl

1003:C語言考試練習題—保留字母

1003:C語言考試練習題——保留字母 Description 編一個程式,輸入 一個字串,將組成字串的所有非英文字母的字元刪除後輸出。 Input 一個字串,長度不超過80個字元。 Out

C語言環形緩衝fifo實現

  (轉自:https://blog.csdn.net/humanspider1/article/details/80965513) #define BUFFSIZE 1024 * 1024 #define min(x, y) ((x) < (y) ? (x) : (y)

C語言--I/O檔案操作

I/O檔案操作 這是C提供的另一種檔案操作,它是通過直接存/取檔案來完成對檔案的處理,而上篇所說流式檔案操作是通過緩衝區來進行;流式檔案操作是圍繞一個FILE指標來進行,而此類檔案操作是圍繞一個檔案的"控制代碼"來進行,什麼是控制代碼呢?它是一個整數,是系統用來

淺談 C 語言中的結構體struct與聯合體union

## C語言中結構 struct 與聯合 union 語法基本一致,如下以 struct 為例 一、struct 的基本用法 struct student {     int num;     char* sex; &nbs

C語言深度解剖最後測試題答案

答案 “>6” 2.strcpy出問題,沒有/0 3.i=10,j=1; 4.除了sizeof(a)是400 5.255 6. 1)*p不能改,p可以改 2)*p不能改,p可以改 3)p不能改,*p可以改 4)*p

mooc_c語言_PTA練習題_中M2018秋C入門和進階練習_19

7-19 計算天數 (15 分) 本題要求編寫程式計算某年某月某日是該年中的第幾天。 輸入格式: 輸入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)給出日期。注意:閏年的判別條件是該年年份能被4整除但不能被100整除、或者能被400整除。閏年的2月有29天。 輸出格式:

PAT考試乙級1005(C語言實現)

#include<stdio.h> int main(){ int num=0,i=0,n[1000]={0},a[101]={0},count=0; scanf("%d",&num); if(num<100)

第一個CGI程序-----完全就是普通的c語言嘛‘(*∩_∩*)′

同學 pat gree ostream 出現 targe 普通 get 方便 第一個CGI程序 ————完全就是普通的C語言嘛 ‘(*∩_∩*)′ PainterQ 2017年5月14日 上一篇博文裏面敘述了Apache的安裝和配置方法,恍恍惚惚我就擁有了自

[C語言]貪吃蛇_結構數組實現

log pan 實現 position .html .cn 數據類型 title ack 一、設計思路 蛇身本質上就是個結構數組,數組裏存儲了坐標x、y的值,再通過一個循環把它打印出來,蛇的移動則是不斷地刷新重新打印。所以撞墻、咬到自己只是數組x、y值的簡單比較。 二、

1005 - C語言程式設計教程(第三版)課後習題4.9

1005 - C語言程式設計教程(第三版)課後習題4.9 時間限制:1秒 記憶體限制:128兆 題目描述 輸入一個華氏溫度,要求輸出攝氏溫度。公式為 c=5(F-32)/9 輸出要求有文字說明,取位2小數。 輸入 一個華氏溫度,浮點數 輸出 攝氏溫度,浮點兩位小數 樣例輸入 -4

PAT 乙級 1001——1005 C語言

以下是我刷PAT乙級的一些總結,不足之處,請各路大神不吝賜教! 1001 題目:害死人不償命的(3n+1)猜想 (15) 卡拉茲(Callatz)猜想: 對任何一個自然數n,如果它是偶數,那麼把它砍掉一半;如果它是奇數,那麼把(3n+1)砍掉一半。這

C語言來實現_輸入一個日期(年月日),計算是這一年中的第幾天

1.環境: 2.程式碼: /*  *wuxiuwen  *input date, the date of this year is calculated which day.  *輸入一個日期(年月日),計算是這一年中的第幾天   */ #include<stdio.

廣州傳智播客iOS基礎班C語言考試題目(自我感覺挺簡單的,很多老師講的都沒考到,錯了一道選擇題,加油,OC!)

廣州傳智播客iOS基礎班C語言考試題目 考試時間:180分鐘 滿分:100分 及格分數:80分 一、選擇題(共10題,每題5分)  1. 若有陣列 int arr[2][3];  則對a陣列元素的正確訪問是(C )     A. arr(1,2)       B. ar

PAT 乙等 1005 C語言

1005. 繼續(3n+1)猜想 (25) 卡拉茲(Callatz)猜想已經在1001中給出了描述。在這個題目裡,情況稍微有些複雜。 當我們驗證卡拉茲猜想的時候,為了避免重複計算,可以記錄下遞推過程中遇到的每一個數。例如對n=3進行驗證的時候,我們需要計算3、5、8、4

C語言程式設計練習題

1. 題目:寫一個程式,判斷兩個浮點數是否足夠精確。/* File name:ApproximatelyEqual Function: ensure the accurcy of two numbers.|x-y|/min(|x|,|y|)<e Time: 20

c語言迴圈練習題

一、輸出變數的值。int quack = 2;quack -=6;//結果為-4,即使加上無符號的定義,結果也為負數。quack /=8;//結果為0,因為是int型別的變數,所以不顯示小數點後面的數字。quack%=3;//結果為2,如果除數比被除數小,則餘數為除數本身。二

C語言基礎練習題c語言試題100道(前三十道)

c語言試題100道(前三十道)  前三十道 //自己做的由於題幹較為模糊可能和標準答案有所差異 1. 按下述格式,從鍵盤輸入一個整數加法表示式:運算元1+運算元2,然後計算 並輸出表達式的計算結果,形式如下:運算元1+運算元2=計算結果。 2. 輸入兩個整形數並