#include<stdio.h>
#include<math.h>
int main()
{
int weight1,weight2,weight3,weight4,d1,d2,d3,d4,x,flag; /*flag:满足题意的标记*/
printf("The weight is broke up as following 4 pieces:");
for(weight1=1;weight1<=40;weight1++) /*将40分解成4份*/
for(weight2=weight1+1;weight2<=40-weight1;weight2++)
for(weight3=weight2+1;weight3<=40-weight1-weight2;weight3++)
if((weight4=40-weight1-weight2-weight3)>=weight3)
{
for(flag=1,x=1;x<41&&flag;x++) /*判断可否称出1~40之间的全部重量*/
for(flag=0,d1=1;d1>-2;d1--) /*将重物放在天平的左边*/
for(d2=1;d2>-2&&!flag;d2--) /*1:砝码在天平右边*/
for(d3=1;d3>-2&&!flag;d3--) /*0:不用该砝码*/
for(d4=1;d4>-2&&!flag;d4--) /*-1:砝码在天平的左边*/
if(x==weight1*d1+weight2*d2+weight3*d3+weight4*d4)
flag=1;
if(flag) printf("%d %d %d %d ",weight1,weight2,weight3,weight4);
flag=0;
}
}
同理 13厘米的无刻度尺子 标记4个位置可表示1到13任意长度
标记点为: 1 4 5 11
两根质地不均匀的 香 ,都可以燃烧一个小时 求如何刻画15分钟:
一根点燃两头 一个点燃一头 ;前者烧完 后者剩30分钟 ,此时后者在点燃两头 ,此时到结束即15分钟
对于行列都排好序的二维数组A[M][N](升序),快速查找某个元素的方法:
先将待查找的元素与A[0][N]比较 ,比它大则删除此列,比它小删除此行 ;可以快速定位`