C語言練習 表達式的遞歸計算

在1 2 3 4 5 6 7 8 9 之間的8個空之間填入“+”“-”“ ”三種,使表達式的值爲110。比如1 2之間填入的是“ ”,則他們成爲12。8個都是“ ”則表達式的值爲123456789。

輸出所有的情況,使表達式的值爲110。

#include <STDIO.H>
#include <string>
#include <stdlib.h>
using namespace std;
int total;

void print(string str)
{
	printf("%d:",total++);
	int i=0,len=str.length();
	while(i<len&&str[i]!='1') i++;
	for (;i<len;i++)
	{
		printf("%c",str[i]);
	}
	printf("=110\n");
}
string atos(int n)
{
	if (n==0)
	{
		return "0";
	}
	string str="";
	int N=1000000000;
	while (n/N==0)
	{
		N=N/10;
	}
	while (n>0)
	{
		str+=char('0'+n/N);
		n=n%N;
		N=N/10;
	}
	return str;
}
void function(int cur,int pre,string str,int result)
{
	if (result==110&&cur>10)
	{
		print(str);
	}
	else if (cur>10)
	{
		return;
	}
	else
	{
		function(cur+1,pre*10+cur,str,result);
		function(cur+1,cur,str+"+"+atos(pre),result+pre);
		function(cur+1,cur,str+"-"+atos(pre),result-pre);
	}

}

int main()
{
	function(0,0," ",0);
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章