遞迴求字母集合的子集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開始填寫, 例