博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1234: 华科版C语言程序设计教程(第二版)习题6.11(约瑟夫问题)
阅读量:6997 次
发布时间:2019-06-27

本文共 694 字,大约阅读时间需要 2 分钟。

题目:

Description
n个人围成一圈,依次从1至n编号。从编号为1的人开始1至k报数,凡报数为k的人退出圈子,输出最后留下的一个人原来的编号。
Input
 首先输入一个t,表示有t组数据(1<= t <= 10010)
然后有t行,每行有2个正整数n和k。(1<= n,k<= 20)
Output
 对于每组测试数据,输出一个数,表示最后留下来的人的编号。

样例:

Sample Input
3
10 3
7 1
5 4
Sample Output
4
7
1

提示: 例如第三组样例:5个人围成一圈,编号1-5。第一轮报数4号出列,第二轮从5开始报数1,3报4,3出列,第三轮从5开始报1,5报4,5出列,第四轮1开始报1,2报4,2出列,最后剩下的为1号。

思路:这题是一个约瑟夫问题,处理方式就是用一个数组,其下标表示序号,其存的指用0,1分别表示其是否出去了,然后用循环,依次进行,若没出去则看这个是第几个没出去的,若是要出去的报数的那个数的倍数,则让其出去,即将存的指由1变为0;然后再找一个计数器表示剩余人数,当剩余只有1个的时候则跳出循环,输出最后的;

新技巧:在于用数组的下标表示序号,用内部存的值表示其状态,还有一个重要的点就是人数计数器,因为这里是要记录出去的人数,所以一开始计数器为总数,之后每次出去就减一,这样从逻辑上好记录与理解;

代码:

#include
#include
int main(){ int i,t,x,y,a[10015]; scanf("%d",&t); for(i=0;i

转载地址:http://pydvl.baihongyu.com/

你可能感兴趣的文章
ubuntu下mysql攻略
查看>>
餐饮云端
查看>>
Ajax , 好大一颗地雷啊
查看>>
黑客攻防实战入门(第三版)
查看>>
速度与激情
查看>>
DX9 HLSL Semantics
查看>>
HDU 4408 Minimum Spanning Tree(最小生成树计数)
查看>>
BZOJ 3142 数列(组合)
查看>>
csharp: word or excel Convert to PDF
查看>>
csharp: Export or Import excel using NPOI
查看>>
一起谈.NET技术,VS 2010 和 .NET 4.0 系列之《多显示器支持》篇
查看>>
“Linaro”将推动开源软件新一波开发潮
查看>>
VS201“.NET研究”0实践RUP4+1架构模型
查看>>
两级导航栏联动效果
查看>>
php ftp类
查看>>
VK Cup 2012 Qualification Round 1 A. Next Round
查看>>
(译)cocos2d精灵教程:第二部分
查看>>
高校女生坐等强女干。保安称压力大。。【转】
查看>>
Python 版 Instance Activator
查看>>
分享30套免费的高质量网页按钮素材
查看>>