第6回ブルーブリッジカップ大会個人戦省戦(ソフトウェア類)Java大学A組


1.
クマがくるみを食べる
森には熊の怪がいて、クルミが大好きです.しかし、毎回見つけたクルミを等しい2つに分けて、1つ食べて、1つ残す習慣があります.等分できないと、熊怪はクルミを1つ捨ててから分けます.次の日にこの過程を続け、最後にクルミが1つ残るまで、直接捨てます.
ある日、熊怪は1543個のクルミを発見しました.これらのクルミを食べる過程で、全部で何個のクルミを捨てますか.
この数字(整数)を記入してください.余分な内容や説明文字は記入しないでください.
public class Main {
	public static void main(String[] args){	
		int n=1543;
		int count=0;
		while(n>0){
			if(n%2==1){
				count++;
				n=n-1;
				n=n/2;
			}
			else{
				n=n/2;
			}
		}
		System.out.println(count);	
	}
}

答え:5
2.星系爆弾X星系の広大な空間に多くのX星人工「爆弾」が漂い、宇宙の道しるべとして使われている.各爆弾は何日後に爆発するかを設定することができます.例えば、アルファ爆弾は2015年1月1日に置かれ、定刻は15日で、2015年1月16日に爆発した.ベタ爆弾があり、2014年11月9日に置かれ、1000日のタイミングで爆発の正確な日付を計算してください.この日付をyyyy-mm-ddとして記入してください つまり、4桁の年2桁の月2桁の日付です.例えば、2015-02-19は厳格にフォーマットに従って書いてください.他の文字や記号は表示できません.
public class Main1 {
    public static void main(String[] args){
        
        int year=2014;
        int month=11;
        int day=9;        
        int count=1000;
        count=count+day;
        boolean flag=false;
    
        int a[][]= {
                {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
                {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
                };        
        while(count>31){
//            month++;
            if(month>12){
                month=1;
                year++;
            }
            flag= (year%4 == 0 && year%100 != 0) || year%400 == 0;
            if(flag){
                count=count-a[1][month];    
                month++;
            }
            else {
                count=count-a[0][month];
                month++;
            }
//                2 30    
            if(flag==true&&month==2&&count==30){
                month++;
                count-=29;
            }
            if(flag==false&&month==2&&(count==29||count==30)){
                month++;
                count-=28;
            }
        }
        
        
        day=count;
//        year=String.format("%02d",year);
        System.out.println(year+"-"+String.format("%02d",month)+"-"+String.format("%02d",day));
        
    }

}


回答:2017-08-05
3.九数の三組の1~9の数字は3つの3桁を構成することができ、A,B,Cとする.  次の関係を満たす必要があります:B=2*A C=3*A A A可能なすべての答えを書いてください.数字の間にスペースが分かれていて、数字は昇順に並んでいます.注意:Aの値のみをコミットし、フォーマットの要求に厳格に従って出力します.
public class Main3 {
    public static void main(String[] args){            
        int a[]={0,0,0,0,0,0,0,0,0};
        int temp;
        int count=0;
        int A,B,C;
        boolean b[]={true,true,true,true,true,true,true,true,true,true};
        for(int a1=1;a1<=3;a1++){
            b[a1]=false;
            for(int a2=1;a2<=9;a2++){                
                if(b[a2]!=false){
                    b[a2]=false;
                    for(int a3=1;a3<=9;a3++){                        
                        if(b[a3]!=false){    
                            A=a1*100+a2*10+a3;
                            if(A<=333){                                                        
                            B=2*A;
                            C=3*A;

                            a[0]=A/100;
                            temp=A-a[0]*100;
                            a[1]=temp/10;
                            a[2]=A%10;
                            
                            a[3]=B/100;
                            temp=B-a[3]*100;
                            a[4]=temp/10;
                            a[5]=B%10;
                            
                            a[6]=C/100;
                            temp=C-a[6]*100;
                            a[7]=temp/10;
                            a[8]=C%10;

                            
                            for(int i=0;i<=7;i++){
                                for(int j=i+1;j<=8;j++){
                                    if(a[i]==a[j]||a[i]==0||a[j]==0){
                                        i=8;                                        
                                    }
                                    if(i==7&&j==8&&a[7]!=a[8]&&a[7]!=0&&a[8]!=0){
                                        System.out.print(A);
                                        System.out.print(' ');
                                    }
                                }
                            }                            
                            count++;    
                            }                        
                                        
                        }    
                                            
                    }    
                    b[a2]=true;
                                }                
                }
            b[a1]=true;            
            }
        //System.out.println(count);
        
        
    }
    
    
}



答え:192 219 273 327
4.
循環節の長さの2つの整数を除算すると、循環小数が発生する場合があり、その循環部分を循環節と呼ぶ.例えば、11/13=6=>0.84615384615353..... そのサイクルセクションは[846153]で6ビットである.次の方法では,ループ節の長さを求めることができる.コードをよく読んで、線の部分に欠けているコードを記入してください.public static int f(int n, int m){n = n % m; Vector v = new Vector();for(;;){v.add(n);n *= 10;n = n % m;if(n==0) return 0;if(v.indexOf(n)>=0)  _________________________________ ;  //欠落している部分だけを記入し、既存のコードを繰り返し写さないように注意してください.余分な文字を記入しないでください.
//     
import java.util.Vector;

public class Main4{

    public static void main(String[] args) {
        System.out.println(f(11, 13));
    }

    public static int f(int n, int m) {
        n = n % m;
        Vector v = new Vector();
        for (;;) {
            //         Vector
            v.add(n);
//            System.out.println(n);
            //   10,           
            n *= 10;
            n = n % m;
            if (n == 0)
                return 0;
            //   n                  
            if (v.indexOf(n) >= 0)
                return v.size() - v.indexOf(n);
        }
    }

}

答え: return v.size() - v.indexOf(n);
5.
菱形を印刷すると、菱形のエッジ長が与えられ、コンソールに菱形が印刷されます.スペースの比較を容易にするために、スペースを句点で置き換えます.辺の長さが8の場合、菱形は:.......*......*.*.....*......*........................*..................*..*..............................*.*.*...............................*.*...*....................................*.....*..................*....................................*........................*.*.......*..................*.*...*....*次のプログラムがこの機能を実現したが、考え方は少しおかしい.コードをよく分析し、線の部分に欠けているコードを記入してください.public class A {public static void f(int n){String s = "*";for(int i=0; i<2*n-3; i++) s += ".";s += "*";String s1 = s + "";String s2 = "";for(int i=0; i//System.out.println("=>"+s);s = "."+ _____________________________________ + "*";  //s 1=s+「」+s 1;s 2+=s+「」;}System.out.println(s 1+s 2);}public static void main(String[]args){f(8)}}欠落した部分のみを記入し、既存のコードを繰り返し写さないように注意してください.余分な文字は記入しないでください.
public class Main5 {
	
	
	public static void f(int n)
	{
		String s = "*";
		for(int i=0; i<2*n-3; i++) s += ".";
		s += "*";
	
		String s1 = s + "
"; String s2 = ""; for(int i=0; i"+s); s = "." +s1.substring(0, 2*n - 4 - i)+ "*"; s1 = s + "
" + s1; s2 += s + "
"; } System.out.println(s1+s2); } public static void main(String[] args) { f(8); } }

答え:s 1.substring(0,2*n-4-i)
6.
加算変乗算では、1+2+3+...+49=1225隣接しない2つのプラス記号を乗算記号にするように要求されています.結果は2015です.例えば、1+2+3+...+10*11+12+...+27*28+29+...+49=2015が要求に合致する答えです.別の可能な答えを探して、前の乗算記号の左側の数字を提出してください.(例としては、コミット10)です.注意:余分な内容を記入しないで整数をコミットする必要があります.
public class Main6 {

	public static void main(String[] args){
		
		for(int a=1;a<=48;a++){
			for(int b=1;b<=48;b++){
//				if(Math.abs(b-a)<=1);
				if(Math.abs(b-a)>1){
					int sum=0;
					for(int i=1;i<=49;i++){
						if(i==a||i==b){							
						}
						if(i==a+1||i==b+1){
							sum=sum+i*(i-1);
						}
						if(i!=a&&i!=b&&i!=b+1&&i!=a+1) sum=sum+i;												
				}
				if(sum==2015){
					System.out.println(a);					
				}
				
			}
		}				
								
		}
			
	}
}
回答:10
(上位の数は10,16,24,27の値をとることができる)
7.トランプ型種数小明がX賭博城にハイジャックされ、他の3人とトランプを余儀なくされた.トランプ1枚(大小のエースを除いて52枚)この时、明ちゃんの头の中で突然一つの问题が出てきました.もし色を考えず、点数だけを考え、自分が得た札の顺番も考えず、自分が手に入れることができる初期札型の组み合わせは全部で何种类ありますか.この整数を书いて、余分な内容や说明文字を书かないでください.
public class Main7 {
	public static void main(String[] args){
		int count=0;
		for(int a1=0;a1<=4;a1++){
			for(int a2=0;a2<=4;a2++){
				for(int a3=0;a3<=4;a3++){
					for(int a4=0;a4<=4;a4++){
						for(int a5=0;a5<=4;a5++){
							for(int a6=0;a6<=4;a6++){
								for(int a7=0;a7<=4;a7++){
									for(int a8=0;a8<=4;a8++){
										for(int a9=0;a9<=4;a9++){
											for(int a10=0;a10<=4;a10++){
												for(int a11=0;a11<=4;a11++){
													for(int a12=0;a12<=4;a12++){
														for(int a13=0;a13<=4;a13++){
															int sum=a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13;
															if(sum==13) count++;
														}
													}
												}
											}
											
										}
									}
								}
							}
						}
					}
				}
			}
		}
		System.out.println(count);
		
	}
}

8.
移動距離
X星の団地の建物はすべて同じで、行列の様式によって並べられています.そのビルの番号は1,2,3です.
1列がいっぱいになると、次の行に隣接するビルから反対方向に並びます.
たとえば、セル番号の幅が6の場合、開始状況は次のようになります.
1  2  3  4  5  6
12 11 10 9  8  7
13 14 15 .....
我々の問題は,2つのビル番号mとnが既知であり,それらの間の最短移動距離を求める必要がある(斜線方向に移動できない)ことである.
3つの整数w mnと入力し、スペースを分けて1~10000の範囲で入力します.
wはシリアル番号幅、m,nは計算対象のビル番号である.
m n 2階間の最短移動距離を表す整数を出力する必要がある.
例:
ユーザー入力:
6 8 2
プログラムは次のように出力されます.
4
次に例を示します.
ユーザー入力:
4 7 20
プログラムは次のように出力されます.
5
生産資源約定:
ピークメモリ消費量(仮想マシンを含む)<256 M
CPU消費  < 1000ms
要求通りに出力し、「入力してください」のような余分な内容を蛇足せずに印刷してください.
すべてのコードを同じソースファイルに配置し、デバッグに合格した後、コピーしてソースコードをコミットします.
注意:package文は使用しないでください.jdk 1.7以降のプロパティは使用しないでください.
注意:メインクラスの名前は:Mainでなければなりません.そうしないと、無効なコードで処理されます.
import java.util.Scanner;


public class Main8 {
	public static void main(String[] args){
			
			Scanner in=new Scanner(System.in);
			int w=in.nextInt();
			int m=in.nextInt();
			int n=in.nextInt();
			int m1=(m-1)/w+1;//  
			int m2=0;//  
			if(m1%2==1) m2=m%w;
			if(m1%2==0) m2=w-m%w+1;
			
			int n1=(n-1)/w+1;
			int n2=0;
			if(n1%2==1) n2=n%w;
			if(n1%2==0) n2=w-n%w+1;
			
			System.out.println(Math.abs(m1-n1)+Math.abs(m2-n2));							
	}
	
	
}