1. 程式人生 > >遞迴求字母集合的子集C++

遞迴求字母集合的子集C++

問題描述:

在txt檔案中輸入一列字母,找到其子集並顯示。

分析:

如果子集不包括空集,一個集合的子集可以表示為前n-1個的子集、前n-1個的子集分別加上最後一個、最後一個

環境:VS2012

#include <iostream>
#include<fstream>
using namespace std;
void move(char a[], int k, int m)//將a[m]項移到最後一項,其他向前移一位
{
     char tmp=a[k];
     for(int i=k;i<m-1;i++)
         a[i]=a[i+1];
     a[m-1]=tmp;
}


void function(char a[],int k,int m)//遞迴
{
     if(k==m)
        for(int j=0;j<2; j++,k--)
{
           for(int i=0; i<k-1; i++)
               cout<<a[i]<<" ";//每行一個子集,空集用空行表示,非空集合每個元素間用一個空格間隔
  cout<<a[k-1];//最後一個元素之後不能有空格
           cout<<endl;
        }
     else
        for(int i=0; i<m-k; i++)
{
           function(a,k+1,m-i);
           move(a,k,m);
        }
}


void main()
{
int m,k=0;  //m為輸入的整數
char a[26];       
ifstream fin("Input.txt");//在txt檔案中輸入m
fin>>m;
for(int i=0;i<m;i++)//初始化
   a[i]='a'+i;
cout<<"----------------------------"<<endl;
if(m<1||m>26)//判斷輸入合法性
   cout<<"WRONG!!!"<<endl;
else
   function(a,k,m);//呼叫遞迴函式
cout<<"-----------------------------"<<endl;
}

相關推薦

字母集合子集C++

問題描述: 在txt檔案中輸入一列字母,找到其子集並顯示。 分析: 如果子集不包括空集,一個集合的子集可以表示為前n-1個的子集、前n-1個的子集分別加上最後一個、最後一個 環境:VS2012 #include <iostream> #include<f

C語言子集

C語言程式設計問題,要求使用遞迴,給定自然數1~n的集合,和自然數m,求各元素之和等於m的子集,設n=20,m= C語言給定自然數1~n的集合,和自然數m,求各元素之和等於m的子集,設n=20,m=48. 求:(1)共有多少符合上述條件的子集? (2)符合上述條件,且子集中

演算法----子集

#include<stdio.h> #include<string.h> char s[50]; int index = 0;//標記選擇後的字元下標 void reSo

子集

#include <iostream> using namespace std; //作為全域性變數 char set[] = {'a', 'b', 'c', 'd'}; bool i

C經典 使用x的y次方

int main(int argc, const char * argv[]) { // 求x的y次方 printf("%d\n",getSum(2, 3)); return 0; } int

[c語言]用和非第n個斐波那契數

程式碼 //1.1遞迴求第n個斐波那契數 #include<stdio.h> int fib(int n) { if(n<=2) return 1; else return fib(n-1)+fib(n-2); } int main

C#用階乘 n!

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 弟子規 { class Program { public static doub

最大最小值演算法 分治策略(c語言實現)

思路:運用分治的思想,將要排序的整個陣列從中間劈開,分別求其左右兩邊的最大最小值,然後將求出的最大最小值合起來進行比較。 當左右兩邊的陣列小到一定程度時: (1)陣列中只有一個元素,maxNum=mi

C/C++ 前n項階乘的值 /和

1.遞迴: 直接或者間接的呼叫自己  2.使用遞迴的時候注意 3點              (1)從什麼時候開始     (2)什麼時候結束      (3)每一次幹什麼 3. 用遞迴求前n項階乘的值(這裡求的是前5項階乘的值)     程式碼如下: 

C++二叉樹映象

1若結點為空則返回 2否則分別求左右子樹映象 3交換左右子樹TreeNode* invertTree(TreeNode* root) { if(root==NULL){ return NULL; } T

C語言使用N的階乘

#include<stdio.h> long fac(int n) { long h; if(!n)h=1; else h=n*fac(n-1); return(h); }

C語言程式設計之階乘

題目: 利用遞迴方法實現一個函式,該函式能夠實現n的階乘,即 n! = n*(n-1)*…*3*2*1; #include <stdio.h> int factorial(int n) { if(n == 1) //結束遞迴判斷條件 { retur

怎樣用SQL各個Folder的檔案數

-- 資料準備 CREATE TABLE [dbo].[ContentObject] (Id NCHAR(10), Name NVARCHAR(500),ParentId NCHAR(10),Type NVARCHAR(50)); INSERT INTO [dbo].[ContentObject]

最大素因數(java)

可能經常進群會問這個群號的最大素因數是多少,或者演算法題中也會遇到。今天就寫一下求最大質因數的模板。 首先分析,怎麼求一個數的最大素因數。首先,我們以前求過最大因數,求最大因數的最暴力為2—n-1暴力查詢,但是這樣太超時了,後來發現在根號n前或者後某個區域查詢就行了。

斐波那契數

斐波那契數是第一個數和第二個數都為1,從第三個數開始,後面的是是前面相鄰兩個數的和。定義的函式如下所示: int fib(int m) {     if (m == 1 || m == 2)         

彙編-n!

參考https://blog.csdn.net/baidu_33836580/article/details/50578877 遞迴計算8!(40320<2^16) ;彙編程式中main是使用者自定義識別符號,可有可無 ;start是程式起始入口點,start 和end start

運用字串最大重複數

void MaxLengthCore(char *cur,char *pre,int *max,int cursum) { if(*cur == '\0') return ; if(pre !=NULL && *cur == *pre) { ++cursum; if(cursum >

10-4 式子和

// 10-4 // 遞迴求式子和 #include <stdio.h> double Exponential(int n, double x); double sum(int n, double x); int main(void) { double x; // 實數x

10-2 階乘和

// 遞迴求階乘和 #include <stdio.h> double fact(int n); // 遞迴求階乘 double sum(int n); // 遞迴求和 int main(void) { int n; printf("請輸入一個整數n(n>0

資料結構——數字旋轉方陣

【數字旋轉方陣問題】 問題描述:輸出下圖所示N×N(N≥1)的數字旋轉方陣。要求:採用遞迴法實現。 提示:注意觀察A、B、C、D四個區域。 void FillInNum(int number, int begin, int MatrixSize) { // 從數字number開始填寫, 例