题目是输入四个数,然后让电脑把对应的四个数进行四则运算结果为24的输出并且是公式输出,
例子1:4,5,6,7
例子1结果:4*((5-6)+7)=24
例子2:1,2,3,4
例子2结果:1*2*3*4
但是在找错时,我发现了,在主函数,在进入自创的stack函数后,运算结果后其没有返回主函数继续运算,为什么啊
#include"stdio.h"
int ji(int a,int b,int count){//这个函数是计算我输入的a,b,c,d在对应符号下的结果,a和b是数值,count是表示用什么方式计算
return count==0?a*b:count==1?a-b:count==2?a/b:a+b;
}
void stack(int a,int b,int c,int d){//这个函数是进行判断结果是否是24,以及循环进行各种结果列出,i决定的第一个符号,j决定的第二个符号,k决定的第三个符号,
int i,j,k,sum,sum2,sum1;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
for(k=0;k<4;k++){
sum=ji(ji(a,b,i),ji(c,d,j),k);//自创的ji函数的嵌套
printf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",a,b,c,d,i,j,k,sum,ji(a,b,i),ji(c,d,j));//这里是我判断哪里错的来源,原来函数是没有这个输出函数,图1的来源也是来自于此,图2没有此函数,当然主函数还有一个输出函数图1图2都有,
if(sum==24){
xian(i,j,k,a,b,c,d);
}
}
}
}
}
void xian(int i,int j,int k,int a,int b,int c,int d){//满足结果为24就会进入这里运算,这里是输出结果结果
printf("%d",a);
fu(i);
printf("%d",b);
fu(j);
printf("%d",c);
fu(k);
printf("%d\n",d);
}
void fu(int a){//这里是xian的附属函数,主要是用于输出变量所代表的的符号
if(a==0){
printf("*");
}
else if(a==1){
printf("-");
}
else if(a==2){
printf("/");
}
else if(a==3){
printf("+");
}
}
void main(){//主函数,主要进行刚开始四个数的输入,以及对四个数打乱排序的输入
int ary[4]={},i,j,k,a;
for(i=0;i<4;i++){
scanf("%d",&ary[i]);
}
for(i=0;i<4;i++){
for(j=0;j<4;j++){
i==j?j++:j;
for(k=0;k<4;k++){
(j==k||i==k)?k++:k;
(j==k||i==k)?k++:k;
a=6-j-k-i;
printf("\t%d,%d,%d,%d\n",i,j,k,a);//这也是进行判断的函数,在图1和图2皆有这个函数输出,但是图1他只是短暂出现了一次。
stack(ary[i],ary[j],ary[k],ary[a]);//这里是主要问题,这没有之后,i,j,k正常循环,
}
}
}
}
#include <stdio.h>
float f(char c, float a, float b){
switch(c){
case '+': return a+b;
case '-': return a-b;
case '*': return a*b;
case '/': return a/b;
}
}
int main()
{
int arr[4], a, b, c, d, flag = 1;
char C[4] = {'+', '-', '*', '/'};
scanf("%d%d%d%d", &arr[0], &arr[1], &arr[2], &arr[3]);
for(int i = 0; i < 4; i++)
for(int j = 0; j < 4; j++)
for(int k = 0; k < 4; k++)
for(int l = 0; l < 4; l++)
if(i != j && i != k && i != l && j != k && j != l && k != l){
a = arr[i];
b = arr[j];
c = arr[k];
d = arr[l];
for(int x = 0; x < 4; x++)
for(int y = 0; y < 4; y++)
for(int z = 0; z < 4; z++){
if(f(C[z], f(C[y], f(C[x], a, b), c), d) == 24){
flag = 0;
if(z > 1){
if((x < 2 && y < 2) || y < 2) printf("(%d%c%d%c%d)%c%d = 24\n", a, C[x], b, C[y], c, C[z], d);
else if(x < 2) printf("(%d%c%d)%c%d%c%d = 24\n", a, C[x], b, C[y], c, C[z], d);
else printf("%d%c%d%c%d%c%d = 24\n", a, C[x], b, C[y], c, C[z], d);
}
else if(y > 2 && x < 2) printf("(%d%c%d)%c%d%c%d = 24\n", a, C[x], b, C[y], c, C[z], d);
else printf("%d%c%d%c%d%c%d = 24\n", a, C[x], b, C[y], c, C[z], d);
}
}
}
if(flag) printf("No Solution");
return 0;
}
|