枚举算法
一.百钱买百鸡
公鸡一,值钱五;母鸡一,值钱三;鸡雏三,值钱一。白钱买百鸡,问翁,母,雏各几何?
#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的功能:从标准输入设备(键盘)读入一个字符,不回显在显示器上.
在算式中,填入 “+-*/”运算符,使等式成立。
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;
}