• 约瑟夫环问题


    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] = { '' };  //存已被标记过的元素
    	int flag[SIZE] = { 0 };  //标记出列的元素
    	
    
    	scanf("%d
    ", &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;
    }
    
  • 相关阅读:
    JAVA面试——设计模式
    CSS清除浮动
    CSS外边距
    baidu-ife
    笔记一则
    Atom
    校园网认证
    四月甘九-省
    Python sys.argv[]用法
    Python模块导入的方法
  • 原文地址:https://www.cnblogs.com/xirfly/p/11999775.html
Copyright © 2020-2023  润新知