题目是输入四个数,然后让电脑把对应的四个数进行四则运算结果为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;
- }
复制代码
|