标签:count 逗号 index int 元素 约瑟夫 问题 ++
7-3 约瑟夫环问题-hebust
约瑟夫环是一个数学的应用问题:已知n个人(以编号a,b,c...分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
输入格式:
固定为2行,第一行为m,第二行为n个人的名称列表,用英文字母代表,元素直接使用英文逗号 , 分开
输出格式:
一行,为出列元素序列,元素之间使用英文逗号 , 分开【注意:末尾元素后没有逗号】
输入样例:
在这里给出一组输入。例如:
3
a,b,c,d,e,f,g
输出样例:
在这里给出相应的输出。例如:
c,f,b,g,e,a,d
实验代码
/*这题写了3个多小时,太难了。主要是着逗号有点烦,后来我就想直接把将元素存入另一个数组中,去掉逗号。
这样就好办多了,然后就遍历,判断,求余等。
#include<stdio.h>
#define SIZE 100
int main()
{
int n;
char str1[SIZE] = { 0 }; //输入元素
char str[SIZE] = { 0 }; //去逗号,存元素
int index = 0; //从第一个元素遍历
int step = 1; //第一个元素也算一步
int count = 0; //出列元素个数
char outs[SIZE] = { '\0' }; //存已被标记过的元素
int flag[SIZE] = { 0 }; //标记出列的元素
scanf("%d\n", &n);
gets(str1);
int len1 = strlen(str1); //输入元素的长度
//将str1数组中的元素去逗号存入str
int j = 0;
for (int i = 0; i < len1; i++)
{
if (str1[i] != ',')
{
str[j] = str1[i];
j++;
}
}
int len = j; //去逗号之后数组的长度
index = 0; //从第一个元素遍历
step = 1; //第一个元素也算一步
while (count < len) //标记元素是否等于数组长度
{
if (step == n) //判断元素是否出列
{
outs[count] = str[index]; //将元素存入outs数组里
count++; //出列元素+1
step = 0; //步数归零,因为下标是已出列的元素
flag[index] = 1; //标记
}
index = (++index) % len; //重复遍历,求余
if (flag[index] == 0) //如果数组元素下标没有被标记,步数+1
{
step++;
}
}
//输出
printf("%c", outs[0]);
for (count = 1; count < len; count++)
{
printf(",%c", outs[count]);
}
return 0;
}
标签:count,逗号,index,int,元素,约瑟夫,问题,++ 来源: https://www.cnblogs.com/lqx0123/p/11999775.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。