题目描述:
尼克喜欢胡萝卜,格莱尔喜欢骨头。15根胡萝卜和 15根骨头排成一圈。
狐狸老师要求尼克从第一根开始按照 1-9数数,逢9取出,直到取出 15次为止。
请设计并实现一算法,帮尼克算一算这 15根胡萝卜和 15根骨头应该如何排列,才能使剩下的 15根全是骨头。
代码实现:
#include <stdio.h>
//抽象模型(仅保留需研究的特征)0-骨头 1-胡萝卜
int main()
{
int a[30] = {0}; // 假设开始30个全是骨头
int count_bone = 0;
int count_carrot = 0;//两个计数器
for (int i = 0;; i++)//无终止条件的循环
{
if(a[i]==0)//碰到骨头
count_bone++;//骨头数加一
if (count_bone % 9 == 0 && a[i] == 0)//逢九碰一物,此物需为骨
{
a[i] = 1;//变回胡萝卜(逆向思维_原本应该为胡萝卜)
count_carrot++;//变回的胡萝卜数
for (int i = 0; i < 30; i++)//一圈30个
printf("%d ", a[i]);//监视每一次变换后的30个物体的状态
printf("\n");printf("第%d的位置被作为萝卜拿走了\n", i+1);
}
if(count_carrot==15)//变出15个胡萝卜时
break;//跳出循环
if(i==31)//保证loop
i = 0;
}
return 0;
}
输出: