说明:本篇对标题所阐述的内容进行了两个方面的解答,分别为:
(1)将退出顺序依次输出。
(2)将最后一个人的序号进行输出。
读者在阅读时一定要注意while循环里的表达式!!!
题目1:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,将退出顺序依次输出。
C代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
int n, array[50], loop;
//输入总人数
printf("Input total number(n<=50):");
scanf("%d", &n);
//编号
for (int i = 0; i < n; i++) {
array[i] = i + 1;
}
int k=0;//报数
int m=0;//退出人数
int *array_end, *p;
array_end = array + n;//数组最后一个元素的下一个位置
p = array;
while (m < n) {
//当前指针未到array_end的位置且其指向的元素不为0
if ((p != array_end)&&(*p != 0)) {
k++;
}
if (k == 3) {
k = 0;
printf("%d ", *p);//输出当前指针指向的元素
*p = 0;//将当前指针指向的元素赋值为0
m++;
}
p++;
if (p == array_end) {
p = array;
}
}
printf("\n");
return 0;
}
C运行结果:
C++代码:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int main() {
int n, array[50];
//输入总人数
cout << "Input total number(n<=50):";
cin >> n;
//编号
for (int i = 0; i < n; i++) {
array[i] = i + 1;
}
int k = 0;//报数
int m = 0;//退出人数
int *array_end, *p;
array_end = array + n;//数组最后一个元素的下一个位置
p = array;
while (m < n) {
//当前指针未到array_end的位置且其指向的元素不为0
if ((p != array_end) && (*p != 0)) {
k++;
}
if (k == 3) {
k = 0;
cout << *p << " ";//输出当前指针指向的元素
*p = 0;//将当前指针指向的元素赋值为0
m++;
}
p++;
if (p == array_end) {
p = array;
}
}
cout << endl;
return 0;
}
C++运行结果:
题目2:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,将最后留下的那个人的序号输出。
C代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
int n, array[50];
//输入总人数
printf("Input total number(n<=50):");
scanf("%d", &n);
//编号
for (int i = 0; i < n; i++) {
array[i] = i + 1;
}
int k=0;//报数
int m=0;//退出人数
int *array_end, *p;
array_end = array + n;//数组最后一个元素的下一个位置
p = array;
while (m < n - 1) //当退出的人数不大于总人数时,即留下的人数至少是一个人
//这句不能写成m<n,因为假设有8人,当退出了6人时,此时还是进行人数退出,即m++,
//这时是7<8,剩下的一个人自己喊1,2,3那么他也就退出了,将不会有输出
{
//当前指针未到array_end的位置且其指向的元素不为0
if ((p != array_end)&&(*p != 0)) {
k++;
}
if (k == 3) {
k = 0;
*p = 0;//将当前指针指向的元素赋值为0
m++;
}
p++;
if (p == array_end) {
p = array;
}
}
printf("最后一个人的序号为:");
for (int loop = 0; loop<n; loop++)
{
if (array[loop] != 0)
{
printf("%d\n", array[loop]);
}
}
return 0;
}
C运行结果: