蓝桥杯 算法训练 筛选号码 java

29 篇文章 0 订阅

 

记录当时写算法题的点滴

算法训练 筛选号码

Description

 

  有n个人围成一圈,顺序排号(编号为1到n)。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子。从下一个人开始继续报数,直到剩下最后一个人,游戏结束。

  问最后留下的是原来第几号的那位。

  举个例子,8个人围成一圈:

  1 2 3 4 5 6 7 8

  第1次报数之后,3退出,剩下:

  1 2 4 5 6 7 8 (现在从4开始报数)

  第2次报数之后,6退出,剩下:

  1 2 4 5 7 8 (现在从7开始报数)

  第3次报数之后,1退出,剩下:

  2 4 5 7 8 (现在从2开始报数)

  第4次报数之后,5退出,剩下:

  2 4 7 8 (现在从7开始报数)

  第5次报数之后,2退出,剩下:

  4 7 8 (现在从4开始报数)

  第6次报数之后,8退出,剩下:

  4 7 (现在从4开始报数)

  最后一次报数之后,4退出,剩下:

  7.

  所以,最后留下来的人编号是7。

Input

 

输入描述:

  一个正整数n,(1<n<10000)

输入样例:

8

Output

 

输出描述:

  一个正整数,最后留下来的那个人的编号。

输出样例:

7

 

 

思路:

当时的做法是将数组的下标保存不变,通过改变数组的值来标记被踢的人,变量t在死循环中一直++,t%3来表示数到3的人,s来检验一轮过后还剩多少人,如果只剩一人就跳出~

 

 

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int[] a = new int[n+1];
		int t=0;
		int win=0;
		while(true)
		{
			for(int i=1;i<=n;i++)
			{
				if(a[i]!=1)
					t++;			
				if(t%3==0)
					a[i]=1;
			}
//			for(int i=1;i<=n;i++)
//			{
//				if(a[i]!=1)
//					System.out.print(i+" ");
//			}
//			System.out.println();
			int s=0;
			for(int i=1;i<=n;i++)
			{
				if(a[i]==0)
				{
					s+=1;
					win=i;
				}
			}	
			if(s==1)
				break;
		}
		System.out.println(win);
		
	}

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值