队列例题
n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1 开始报数,数到 m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。
输入格式
输入两个整数 n,m。
输出格式
输出一行 n 个整数,按顺序输出每个出圈人的编号。
eg.
输入 #1
10 3
输出 #1
3 6 9 2 7 1 8 5 10 4
说明/提示
1<=m;n<=100;
import java.util.LinkedList;//队列导包
import java.util.Queue;
import java.util.Scanner;
//洛谷P1996
public class quan_quan {
public static void main(String[] args) {
Queue<Integer>q=new LinkedList<>();//创建对象
Scanner scan = new Scanner(System.in);
int n =scan.nextInt();
int m = scan.nextInt();
for (int i = 1; i <=n; i++) {
q.add(i);//填充数据第几号
}
int res=0;
while (!q.isEmpty()){ //非空判断直到没人
int x = q.poll();//删除并返回被删除的元素
res++;
if (res==m){
System.out.print(x+" ");
res=0;//m归零
}
else q.add(x);//添加序号开始第二轮判断
}
}
}
分析: 通过队列先进先出特性,可以对原组数据进行有次序的选择操作
栈例题
小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 a_i(长度不一定,以0结束),记住了然后反着念出来(表示结束的数字 0 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。
输入格式
一行内输入一串整数,以 0 结束,以空格间隔。
输出格式
一行内倒着输出这一串整数,以空格间隔。
eg. 输入 #1
3 65 23 5 34 1 30 0
输出 #1
30 1 34 5 23 65 3
说明/提示
数据规模与约定
对于 100% 的数据,保证 0 <= a_i <= 2^{31}-1 ,数字个数不超过 100。
import java.util.Scanner;
import java.util.Stack;
//洛谷p1427
public class xiao_yu {
public static void main(String[] args) {
Stack<Integer>stack=new Stack<>();
Scanner scan = new Scanner(System.in);
while (scan.hasNextInt()){//是整型则继续读取
int x=scan.nextInt();
if(x==0){
break;
}
stack.push(x);
}
while (!stack.isEmpty()){
System.out.println(stack.pop());
}
}
}