枚举算法



枚举算法

一.百钱买百鸡

公鸡一,值钱五;母鸡一,值钱三;鸡雏三,值钱一。白钱买百鸡,问翁,母,雏各几何?

#include <stdio.h>

#include <conio.h>

int main () {

int x = 0;

int y = 0;

int z = 0;

for (x = 0; x <= 20; x++) {

for (y = 0; y <=33; y++) {

z = 100 - x - y;

if (z%3 == 0 && x*5+y*3+z/3 == 100)

  printf ("公鸡:%d,母鸡:%d,小鸡:%d\n",x,y,z);

}

}

getch();

return 0;

}

 

getch函数在C语言中使用时需包含的头文件为 conio.h ,应写为#include<conio.h>

函数原型为:int getch(void);

getch的功能:从标准输入设备(键盘)读入一个字符,不回显在显示器上.


二. 填写运算符
  1. 在算式中,填入+-*/”运算符,使等式成立。

    5 5 5 5 =5  可更改其他数字

    #include <stdio.h>

    int main() {

    int j = 0;

    int i[5] = {0};

    int sign = 1;

    int result = 0;

    int count = 0;

    int num[6] = {0};

    float left = 0;

    float right = 0;

    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]++) {

    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语句,将四种运算符填到对应位置,并进行运算

        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 ("没有符合要求的方法");

     

    return 0;

    }

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值