0
点赞
收藏
分享

微信扫一扫

Day29-C语言枚举算法

双井暮色 2022-01-08 阅读 62

题目:填数游戏

代码: 

#include "stdio.h"
int main()
{
   int a[5];
   for(a[0]=1;a[0]<=9;a[0]++)
   	for(a[1]=0;a[1]<=9;a[1]++)
   		for(a[2]=0;a[2]<=9;a[2]++)
   			for(a[3]=0;a[3]<=9;a[3]++)
   				for(a[4]=1;a[4]<=9;a[4]++)
   	 	 	 	 	 if((a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4])*a[0]==a[4]*100000+a[4]*10000+a[4]*1000+a[4]*100+a[4]*10+a[4])
   	 	 	 	 	 {
   	 	 	 	 	 	printf("%d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4]);
   	 	 	 	 	 	printf("*       %d\n",a[0]);
   	 	 	 	 	 	printf("_________\n");
   	 	 	 	 	 	printf("%d %d %d %d %d\n",a[4],a[4],a[4],a[4],a[4]);
   	 	 	 	 	 }
    return 0;
}

结果:

7 9 3 6 5
*       7
_________
5 5 5 5 5

题目:填运算符

 代码:

#include<stdio.h>
int main()
{
    int j,i[5];             //循环变量,数组i用来表示4个运算符 
    int sign;               //累加运算时的符号 
    int result;             //保存运算式的结果值 
    int count=0;            //计数器,统计符合条件的方案 
    int num[6];             //保存操作数 
    float left,right;       //保存中间结果 
    char oper[5]={' ','+','-','*','/'}; //运算符 
    printf("输入5个数,之间用空格隔开:");
    for(j=1;j<=5;j++)
        scanf("%d",&num[j]);
    printf("指定结果:");
        scanf("%d",&result);
    for(i[1]=1;i[1]<=4;i[1]++) //循环4种运算符,1表示+,2表示-,3表示*,4表示/ 
    {
        if((i[1]<4)||(num[2]!=0)) //运算符若是/,则第二个运算数不能为0
        {
            for(i[2]=1;i[2]<=4;i[2]++)
            {
                if((i[2]<4)||(num[3]!=0))
                {
                    for(i[3]=1;i[3]<=4;i[3]++)
                    {
                        if((i[3]<4)||(num[4]!=0))
                            {
                                for(i[4]=1;i[4]<=4;i[4]++)
                                    {
                                        if((i[4]<4)||(num[5]!=0))
                                        {
                                            left=0;
                                            right=num[1];
                                            sign=1;
                    //使用case语句,将4种运算符填到相应的空格中,并进行运算 
                                            for(j=1;j<=4;j++)
                                                {
                                                    switch(oper[i[j]])
                                                    {
                                                        case '+':
                                                        left=left+sign*right;
                                                        sign=1;
                                                        right=num[j+1];
                                                        break;
                                                        case '-':
                                                        left=left+sign*right;
                                                        sign=-1;
                                                        right=num[j+1];
                                                        break;
                                                        case '*':
                                                        right=right*num[j+1];
                                                        break;
                                                        case '/':
                                                        right=right/num[j+1];
                                                        break;
                                                    }
                                                 }
                        if(left+sign*right==result)
                        {
                            count++;
                            printf("%3d: ",count);
                            for(j=1;j<=4;j++)
                                printf("%d%c",num[j],oper[i[j]]);
                                printf("%d=%d\n",num[5],result);
                        }
                                        }
                                    }
                            }
                    }
                }
            }
        }
    }
    if(count==0)
        printf("没有符合要求的方法!\n");
        getchar();
        return 0;
}

结果:

输入5个数,之间用空格隔开:5 5 5 5 5
指定结果:5
  1: 5+5+5-5-5=5
  2: 5+5-5+5-5=5
  3: 5+5-5-5+5=5
  4: 5+5-5*5/5=5
  5: 5+5-5/5*5=5
  6: 5+5*5-5*5=5
  7: 5+5*5/5-5=5
  8: 5+5/5-5/5=5
  9: 5+5/5*5-5=5
 10: 5-5+5+5-5=5
 11: 5-5+5-5+5=5
 12: 5-5+5*5/5=5
 13: 5-5+5/5*5=5
 14: 5-5-5+5+5=5
 15: 5-5*5+5*5=5
 16: 5-5*5/5+5=5
 17: 5-5/5+5/5=5
 18: 5-5/5*5+5=5
 19: 5*5+5-5*5=5
 20: 5*5-5*5+5=5
 21: 5*5*5/5/5=5
 22: 5*5/5+5-5=5
 23: 5*5/5-5+5=5
 24: 5*5/5*5/5=5
 25: 5*5/5/5*5=5
 26: 5/5+5-5/5=5
 27: 5/5-5/5+5=5
 28: 5/5*5+5-5=5
 29: 5/5*5-5+5=5
 30: 5/5*5*5/5=5
 31: 5/5*5/5*5=5
 32: 5/5/5*5*5=5
举报

相关推荐

0 条评论