【Java】paiza Cランクレベルアップメニュー>シミュレーション

とりあえず100回もあれば決着がつくかと書いたコード。
当然ひっかかりました。残念。

ダメだったコード

import java.util.*;


public class Main {
    public static void main(String[] args) {
        // 自分の得意な言語で
        // Let's チャレンジ!!
        
        Scanner sc = new Scanner(System.in);
        int paiza_hp = sc.nextInt();
        
        int count = 0;//reset
        int[] paiza_give_damage = new int[100];
        int[] monster_give_damage = new int[100];
        
        while(paiza_hp > 0){
            count++;
            
            //paiza attack
            if(count==1 || count==2){
                paiza_give_damage[count] = 1;
            }else{
                paiza_give_damage[count] = monster_give_damage[count-1] + monster_give_damage[count-2];
            }
            
            //monster attack
            if(count==1 || count==2){
                monster_give_damage[count] = 1;
            }else{
                monster_give_damage[count] = monster_give_damage[count-1]*2 + monster_give_damage[count-2];
            }
            
            //paiza hp
            paiza_hp -= monster_give_damage[count];
            
        }
        
        
        //String line = sc.nextLine();
        System.out.println(count);
    }
}

解答例コードを見て構造を立て直しました。
自分流にアレンジしてあります。

通ったコード

import java.util.*;


public class Main {
    public static void main(String[] args) {
        // 自分の得意な言語で
        // Let's チャレンジ!!
        
        Scanner sc = new Scanner(System.in);
        int paiza_hp = sc.nextInt();
        
        int count = 0;//reset
        int[] paiza_give_damage = {0,0,0};//今回ダメージ、1つ前ダメージ、2つ前ダメージ
        int[] monster_give_damage = {0,0,0};
        
        while(paiza_hp > 0){
            count++;
            
            
            //System.out.println("count is"+count);

            
            //paiza
            paiza_give_damage[2] = paiza_give_damage[1];//2つまえのダメ スライドする
            paiza_give_damage[1] = paiza_give_damage[0];

            if(count==1 || count==2){
                paiza_give_damage[0] = 1;
            }else{
                paiza_give_damage[0] = monster_give_damage[1] + monster_give_damage[2];
            }
            
            //monster
            monster_give_damage[2] = monster_give_damage[1];//2つまえのダメ スライドする
            monster_give_damage[1] = monster_give_damage[0];

            if(count==1 || count==2){
                monster_give_damage[0] = 1;
            }else{
                monster_give_damage[0] = paiza_give_damage[0]*2 + paiza_give_damage[1];//ここ
            }      
            
            //System.out.println(Arrays.toString(paiza_give_damage));
            //System.out.println(Arrays.toString(monster_give_damage));
            
            paiza_hp -= monster_give_damage[0];
            
        }
        

        System.out.println(count);
    }
}

正直これ通ったのが自分でもよく分からない

はじめは、ここの部分、

monster_give_damage[0] = paiza_give_damage[1]*2 + paiza_give_damage[2];//ここ

としていたんですが、wrong answerになりました。配列をひとつずらしたら通りました。通ったけどなぜこれが正解なのかわからない。残念。

あぶらぼうず
とりあえず後々理解できればいいかなと思っているあぶらぼうず

https://paiza.jp/works/mondai/c_rank_level_up_problems/c_rank_simulation_boss

paiza問題集

0

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です