欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二十二:寻找组合

程序员文章站 2024-03-18 12:29:52
...
问题 : 寻找组合
题目描述

现在有4个整数,分别为a,b,c,d(位于1-9之间)请在这四个数之间填上+-*/(每一步计算的结果都是只取整数部分)使其结果为100。如下的式子便是满足此组合的式子:(注意:计算不论优先级,先计算a和b,再将结果与c运算,最后和d。)
1+3*5*5=100
 2+3*4*5=100
 3+2*5*4=100
 4+6*2*5=100
 5+5*5*2=100
 6+6*9-8=100
 7-2*4*5=100
 8+4+8*5=100
 9*2*6-8=100

请找出所有的这样的组合,并输出有多少个这样的组合。

#include<stdio.h>
char str[4]={'-','+','*','/'};
int k=0;
void fun(int a[],int i,char str1[],int b){
	int m;
	if(i==3){
		if(b==100){
			k++;
			printf("%d%c%d%c%d%c%d=%d\n",a[0],str1[0],a[1],str1[1],a[2],str1[2],a[3],b);
		}
	return;
	}
	for(int n=0;n<4;n++){
		m=b;
		switch(str[n]){
			case '-':m=m-a[i+1],str1[i]='-';break;
			case '+':m=m+a[i+1],str1[i]='+';break;
			case '*':m=m*a[i+1],str1[i]='*';break;
			case '/':m=m/a[i+1],str1[i]='/';break;
		}
		fun(a,i+1,str1,m);		
	}
}
int main(){
	int a[4],i,b;
	char str1[4];
	for(a[0]=1;a[0]<10;a[0]++){
		for(a[1]=1;a[1]<10;a[1]++){
			for(a[2]=1;a[2]<10;a[2]++){
				for(a[3]=1;a[3]<10;a[3]++){
					b=a[0];
					i=0;
					fun(a,i,str1,b);
				}
			}
		}
	}
	printf("%d",k);
}


相关标签: c语言实现