2068533370 发表于 2021-12-30 22:01:12

使用函数后不进行循环

题目是输入四个数,然后让电脑把对应的四个数进行四则运算结果为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={},i,j,k,a;
        for(i=0;i<4;i++){
                scanf("%d",&ary);
        }
        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,ary,ary,ary);//这里是主要问题,这没有之后,i,j,k正常循环,
                        }
                }
        }
}

傻眼貓咪 发表于 2021-12-30 22:01:13

#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, a, b, c, d, flag = 1;
    char C = {'+', '-', '*', '/'};
    scanf("%d%d%d%d", &arr, &arr, &arr, &arr);
    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;
      b = arr;
      c = arr;
      d = arr;
      for(int x = 0; x < 4; x++)
      for(int y = 0; y < 4; y++)
      for(int z = 0; z < 4; z++){
            if(f(C, f(C, f(C, 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, b, C, c, C, d);
                  else if(x < 2) printf("(%d%c%d)%c%d%c%d = 24\n", a, C, b, C, c, C, d);
                  else printf("%d%c%d%c%d%c%d = 24\n", a, C, b, C, c, C, d);
                }
                else if(y > 2 && x < 2) printf("(%d%c%d)%c%d%c%d = 24\n", a, C, b, C, c, C, d);
                else printf("%d%c%d%c%d%c%d = 24\n", a, C, b, C, c, C, d);
            }
      }
    }
    if(flag) printf("No Solution");
    return 0;
}

2068533370 发表于 2022-1-3 15:11:26

傻眼貓咪 发表于 2021-12-31 19:24


厉害,兄弟,但是我想问的是为什么我那个中途运行到一半就停止循环了,明明没有对应的函数,鱼币给你了,有机会帮我想想函数为什么运行到一半就不运行了。
页: [1]
查看完整版本: 使用函数后不进行循环