聪明猪Tom及其家人和其他猪群居,他们面临凶恶屠户Thomas,Thomas有一个嗜好,他喜欢将群居的猪排成一行,首先将处于奇数位置的猪送到屠宰场,剩下的猪自然成为新的一行。
在新的一行中,再次将处于单数位置的猪送到屠宰场,如此重复多次。
从键盘上输入所有猪的个数m(假设m不超过100),Tom及家人的个数n,求解Tom及家人应该站的最佳位置,输出这些位置。
c语言(数组,循环,)
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
滴水不穿石 2022-12-03 00:07关注个人理解,仅供参考!谢谢!



#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; }本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报