問題3の場合

問題3の場合には(Java実装)

ペンの質問を記録します。

 

問題のシナリオ:

  Nの個人的な円は、パケットの数は、1〜3の報告から、人間の列3は、サイクルが順次最後だけ次の人、キューの中の元の位置を求めている人を知って続けて報告し、最初の人から始めます。キーボードのNからの入力を必要とし、出力は最後に残った人の位置です。

 

例:

  入力:5、出力:4

  入力:3、出力:2

 

ここで私は二つの方法を使用して達成するためのコードであり、1は、スタックを使用することで、バケットソートと同様の方法を使用することです。

 

図1に示すように、スタックを使用して

 

インポートjava.util.Scanner;
輸入java.util.Stackを;
パブリック クラスメイン{
     静的 int型ループ= 0 パブリック 静的 ボイドメイン(文字列[]引数){
         長い TIME1 = にSystem.currentTimeMillis(); 
        スキャナスキャナ = 新しいスキャナ(System.in)。
        int型のn; 
        スタック <整数> stack1 = 新しいスタック<> (); 
        スタック <整数> stack2 = 新しいスタック<> (); 
        N = scanner.nextInt()。
        以下のためにint型 I = N; I> 0; i-- ){ 
            stack1.push(I)。
        } 
        int型の合計= 0 ;
        一方、(!stack1.size()= 1 ){
             場合(stack2.size()== 0 ){ 
                合計 = stack1.size()。
                以下のためにint型、iは<=総; I = 1 iは++ ){ 
                    ループ ++ もし(ループ%3 == 0 ){ 
                       stack1.pop()。
                   } {  
                       stack2.push(stack1.pop())。
                   } 
                } 
            } 
            もし(stack1.size()== 0 ){ 
                合計 = stack2.size()。
                以下のためにint型、iは<=総; I = 1 iは++ ){ 
                    stack1.push(stack2.pop())。
                } 
            } 
        } 
        のSystem.out.println(stack1.pop())。
        長い TIME2 = にSystem.currentTimeMillis(); 
        System.out.println(TIME2 - 時刻1)。
    } 
}

 

 

 

2、バケットソートの使用

import java.util.Scanner;
public class To3 {
public static void main(String[] args){
long time1=System.currentTimeMillis();
int[] a;
int n;
Scanner scanner=new Scanner(System.in);
n=scanner.nextInt();
a=new int[n+1];
for(int i=1;i<=n;i++)
a[i]=1;
int i=1,num=0,flag=0;
while(flag!=n-1)
{
if(a[i]==1)
num++;
if(num==3)
{
a[i]=0;
num=0;
flag++;
}
if(i==n)
{
i=0;
}
i++;
}
for(int j=1; j<=n; j++)
{
if(a[j]==1)
System.out.println(j);
}
long time2=System.currentTimeMillis();
System.out.println(time2-time1);
}
}

 

 

从所耗时间上来看,第二种方法效率更高,并且在N的大小逐渐增大的情况下,第二种方法的效率会比第一种好很多。

将第二种算法改用C/C++实现的话,应该运行速度还能提升不少,有兴趣的可以尝试一下。

 

 

 

 

 

吾生也有涯,而知也无涯。

 

おすすめ

転載: www.cnblogs.com/hzauxx/p/11458063.html