鱼C论坛

 找回密码
 立即注册
查看: 1034|回复: 2

[已解决]使用函数后不进行循环

[复制链接]
发表于 2021-12-30 22:01:12 | 显示全部楼层 |阅读模式
15鱼币
题目是输入四个数,然后让电脑把对应的四个数进行四则运算结果为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正常循环,
                        }
                }
        }
}
最佳答案
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[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;
}
屏幕截图 2021-12-30 214125.png
屏幕截图 2021-12-30 214339.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-1-3 15:11:26 | 显示全部楼层

厉害,兄弟,但是我想问的是为什么我那个中途运行到一半就停止循环了,明明没有对应的函数,鱼币给你了,有机会帮我想想函数为什么运行到一半就不运行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-9 21:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表