聪明猪Tom及其家人和其他猪群居,他们面临凶恶屠户Thomas,Thomas有一个嗜好,他喜欢将群居的猪排成一行,首先将处于奇数位置的猪送到屠宰场,剩下的猪自然成为新的一行。
在新的一行中,再次将处于单数位置的猪送到屠宰场,如此重复多次。
从键盘上输入所有猪的个数m(假设m不超过100),Tom及家人的个数n,求解Tom及家人应该站的最佳位置,输出这些位置。
个人理解,仅供参考!谢谢!
#include <stdio.h>
//提取有效数字个数
int getn(int *arr, int n)
{
int k = 0;
for (int i = 0; i < n; i++)
{
if (arr[i] != -1)
{
k++;
}
}
return k;
}
int main(int argc, char *argv[])
{
int m, n;
do
{
scanf("%d%d", &m, &n);
} while (m > 100 || m < 0 || n < 0 || n > m);
int arrm[m];
//初始化
for (int i = 0; i < m; i++)
arrm[i] = i + 1;
//设置
int z = 0, k = 0; //k奇数计数器
for (int i = 0; i < m; i++)
{
//设置一个剔除位值为-1
if (arrm[i] != -1)
{
k++;
if (k % 2 != 0)
arrm[i] = -1;
}
//提取有效位个数
z = getn(arrm, m);
//如果有效位个数等于小猪家人数跳出循环
if (z == n)
break;
//保证回圈循环
if (i == m - 1)
{
k = 0;
i = -1;
}
}
puts("\n小猪家人最好的位置:");
for (int i = 0; i < m; i++)
{
if (arrm[i] != -1)
printf("第%d位\n", arrm[i]);
}
return 0;
}