1. 程式人生 > 其它 >Winform DatagridviewComboBox 繫結列舉實現顯示Description

Winform DatagridviewComboBox 繫結列舉實現顯示Description

目錄

遞迴

1315【例4.5】集合的劃分

【題目描述】
設S是一個具有n個元素的集合,S=⟨a1,a2,……,an⟩,現將S劃分成k個滿足下列條件的子集合S1,S2,……,Sk ,且滿足:
1.Si≠∅
2.Si∩Sj=∅ (1≤i,j≤k,i≠j)
3.S1∪S2∪S3∪…∪Sk=S
則稱S1,S2,……,Sk是集合S的一個劃分。它相當於把S集合中的n個元素a1,a2,……,an 放入k個(0<k≤n<30)無標號的盒子中,使得沒有一個盒子為空。請你確定n個元素a1,a2,……,an 放入k個無標號盒子中去的劃分數S(n,k)。

【輸入】給出n和k。
【輸出】n個元素a1,a2,……,an 放入k個無標號盒子中去的劃分數S(n,k)。
【輸入樣例】10 6
【輸出樣例】22827

【題解】

點選檢視程式碼

1316【例4.6】數的計數(Noip2001)

【題目描述】我們要求找出具有下列性質數的個數(包括輸入的自然數n)。先輸入一個自然數n(n≤1000),然後對此自然數按照如下方法進行處理:
不作任何處理;
在它的左邊加上一個自然數,但該自然數不能超過原數的一半;
加上數後,繼續按此規則進行處理,直到不能再加自然數為止。

【輸入】自然數n(n≤1000)。
【輸出】滿足條件的數。
【輸入樣例】6
【輸出樣例】6
【樣例解釋】滿足條件的數為如下所示:

   6
  16
  26
 126
  36
 136

【題解】

點選檢視程式碼

1198 逆波蘭表示式

【題目描述】逆波蘭表示式是一種把運算子前置的算術表示式,例如普通的表示式2 + 3的逆波蘭表示法為+ 2 3。逆波蘭表示式的優點是運算子之間不必有優先順序關係,也不必用括號改變運算次序,例如(2 + 3) * 4的逆波蘭表示法為* + 2 3 4。本題求解逆波蘭表示式的值,其中運算子包括+ - * /四個。

【輸入】輸入為一行,其中運算子和運算數之間都用空格分隔,運算數是浮點數。
【輸出】輸出為一行,表示式的值。可直接用printf("%f\n", v)輸出表達式的值v。
【輸入樣例】* + 11.0 12.0 + 24.0 35.0
【輸出樣例】1357.000000
【題解】

點選檢視程式碼

1199 全排列

【題目描述】給定一個由不同的小寫字母組成的字串,輸出這個字串的所有全排列。
我們假設對於小寫字母有‘a’ <‘b’ < ... <‘y’<‘z’,而且給定的字串中的字母已經按照從小到大的順序排列。

【輸入】只有一行,是一個由不同的小寫字母組成的字串,已知字串的長度在1到6之間。
【輸出】輸出這個字串的所有排列方式,每行一個排列。要求字母序比較小的排列在前面。字母序如下定義:
已知S=s1s2...sk,T=t1t2...tk,則S<T等價於,存在p(1<=p<=k),使得s1=t1,s2=t2,...,sp−1=tp−1,sp<tp成立。
【輸入樣例】

abc

【輸出樣例】

abc
acb
bac
bca
cab
cba

【題解】

點選檢視程式碼
#include<stdio.h>
#include<string.h>

int n;
int vis[10], cnt=-1;
char a[10], s[10];

void sort(char arr[], int l, int r) {
    for(int i=r; i>=l; i--) {
        for(int j=l; j<i; j++) {
            if(arr[j]>arr[j+1]) {
                char temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
}

void dfs(int m) {
    if(m>n) {
        printf("%s\n",s); return;
    }
    for(int i=0; i<n; i++) {
        if(!vis[i]) {
            vis[i]=1;
            s[++cnt]=a[i];
            dfs(m+1);
            --cnt;
            vis[i]=0;
        }
    }
}

int main() {
    scanf("%s", a);
    n=strlen(a);
    sort(a, 0, n-1);
    dfs(1);
    return 0;
}

1200 分解因數

【題目描述】給出一個正整數a,要求分解成若干個正整數的乘積,即a=a1×a2×a3×...×an,並且1<a1≤a2≤a3≤...≤an,問這樣的分解的種數有多少。注意到a=a也是一種分解。

【輸入】第1行是測試資料的組數n,後面跟著n行輸入。每組測試資料佔1行,包括一個正整數a(1<a<32768)。
【輸出】n行,每行輸出對應一個輸入。輸出應是一個正整數,指明滿足要求的分解的種數。
【輸入樣例】

2
2
20

【輸出樣例】

1
4

1201 菲波那契數列

1202 Pell數列

1203 擴號匹配問題

1204 樓梯

1205 漢諾塔問題

1206 放蘋果

1207 求最大公約數問題

1208 2的冪次方表示

1209 分數求和

1210 因子分解

1211 判斷元素是否存在