CCF--游戏--用Java语言实现

题目要求:

 

分析:

①报数是k的倍数或者末位数是k则淘汰

②剩最后一位则直接输出

③每一位的报数都是后面报数+1

思路:

1.创建一个数组,数组下标做编号,数组元素为报数,但数组下标是从0开始,而编号是从1开始,所以最后输出数组下标需要+1

2.将第一轮所有报数都放进数组元素中

3.while一直循环,直到剩最后一位则跳出

4.在while中:

①将满足报数是k的倍数或者末位数是k的设置为0,表示淘汰,淘汰人数+1,最后输出大于0的数组元素即可。

②判断是否剩最后一位,如果是则跳出while循环

③如果不是则没有淘汰中继续增加报数数量

④跳出循环后输出数组下标+1(编号)

 

代码:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();   //小朋友的个数
		int k = sc.nextInt();   //k为倍数或最后的个位数
		int check = 0;			//淘汰人数
		int num =1;  			//数组元素初始值
		
		//数组下标表示有n位小朋友,注意数组从0开始,所以最后输出数组下标应该+1
		int [] game = new int[n];
		
		//数组下标是小朋友的编号,数组元素是报数
		for(int i=0;i<n;i++){
				game[i] =num++;
		}
		
		while(true){
			
		//判断报数是否为k的倍数或者末位数是k,如果是的话,就将该报数(数组元素)重置为0,check增加相当于淘汰人数增加
			for(int i =0;i<n;i++){
				if(game[i] !=0 && (game[i]%k ==0 || game[i]%10 ==k )){
					game[i] = 0;
					check++;
				}
			}
			
			//判断淘汰人数是否与总的小朋友相差一位,是的话结束循环
			if(check == n-1){
				break;
			}
			
			//判断不是相差一位则继续增加报数
			for(int i=0;i<n;i++){
				if(game[i] !=0){
					game[i]  = num++;
				}
			}	
		}
		//输出数组下标+1相当于小朋友编号
		for(int i=0;i<n;i++){
			if(game[i] !=0){
				System.out.println(i+1);
			}
		}
	}
}

 

因为循环用多次,所有运行时间超时了,只有90,这里只是提供用数组做的思路,简单应该要使用队列,栈之类的。

转载需声明...后续继续更新用Java实现ccf例题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值