码迷,mamicode.com
首页 > 其他好文 > 详细

构造队列

时间:2016-08-24 14:17:36      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

小明同学把1到n这n个数字按照一定的顺序放入了一个队列Q中。现在他对队列Q执行了如下程序:

while(!Q.empty())              //队列不空,执行循环
{
int x=Q.front(); //取出当前队头的值x
Q.pop(); //弹出当前队头
Q.push(x); //把x放入队尾
x = Q.front(); //取出这时候队头的值
printf("%d\n",x); //输出x
Q.pop(); //弹出这时候的队头
}

做取出队头的值操作的时候,并不弹出当前队头。
小明同学发现,这段程序恰好按顺序输出了1,2,3,...,n。现在小明想让你构造出原始的队列,你能做到吗?[注:原题样例第三行5有错,应该为3,以下已修正] 

输入描述:
第一行一个整数T(T ≤ 100)表示数据组数,每组数据输入一个数n(1 ≤ n ≤ 100000),输入的所有n之和不超过200000。
输出描述:
对于每组数据,输出一行,表示原始的队列。数字之间用一个空格隔开,不要在行末输出多余的空格.

代码如下:(约瑟夫环问题:http://baike.baidu.com/link?url=VQZHb5GQ8RjoVCksjp84HRX9tABXLDloJ9lDyBcrQcPCy3Wyt2IcInBHKrd-J-uQghrijMF8ox5Z8v39EOLNQ_)
 1 import java.util.Scanner;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6         Scanner scanner=new Scanner(System.in);
 7         while(scanner.hasNext())
 8         {
 9         int T=scanner.nextInt();
10         while(T>0)
11         {
12             int n=scanner.nextInt();
13             int[] nums=new int[n];
14             boolean[] flags=new boolean[n];
15             boolean flag=false;
16             int num=1;
17             
18             for(int i=0;i<n;)
19             {
20 
21                     if(!flag&&flags[i]==false)
22                     {
23                         flag=true;
24                     }
25                     else{
26                          if(flags[i]==false)
27                          {
28                              nums[i]=num++;
29                              flags[i]=true;
30                              flag=false;
31                          }
32                     }
33                     i++;
34                     if(i>=n)
35                         i=i%n; 
36                     
37                     if(num>n)
38                             break;
39             }
40             System.out.print(nums[0]);
41             
42             for(int i=1;i<n;i++)
43                 System.out.print(" "+nums[i]);
44             System.out.println();
45             T--;
46             
47         }
48         }
49     }
50 
51 }

 

构造队列

标签:

原文地址:http://www.cnblogs.com/ghuosaao/p/5802538.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!