2020-4-13-Ali筆記試験

1時間、2つのコードの質問。

1 、投票

投票に参加している小動物はn匹(数1〜n)います。再びn番号が与えられると、それは各小動物崇拝状況を表します。i番目の数字は、i番目の動物の崇拝を表します。0の場合は、動物を崇拝せず、自分自身にのみ投票できることを意味します。0でない場合はjと見なされ、投票時に自分自身に投票し、jで投票する場合があります。小動物ごとに可能な限り高い票数を見つけてください。
ケース:
4
0 1 2 1 4
最初の行は、合計4匹の動物を示します。
2行目、崇拝のない1番の動物、2崇拝1、3崇拝2、4崇拝1
出力:4 2 1 1

分析

  • 必要なのは、各動物の最高得票数で、i番目の動物の最高得票数を計算する場合、崇拝対象の有無にかかわらず、間違いなく自分で投票することは間違いありません。
  • i番目の動物の投票数を数えるとき、他の動物はできるだけ投票します。最初に、彼らは自分自身に投票することはできません。2番目に、彼らは投票するためにアイドルに従う必要があります。崇拝チェーンがある場合、アイドルアイドルアイドル...そのうちの1人がiの場合、iで投票できます(私は自分で投票します)。これは、他の動物がi番目の動物に投票する場合です。
  • この崇拝チェーンが動物iに到達しない場合、つまり常にアイドルを探している場合、終了は0です。これは、一部の動物がiに投票できないことを意味します。

コード(java)

public static void ali1(){
//  4
//  0 1 2 1
      Scanner in = new Scanner(System.in);
      //动物个数
      int n = in.nextInt();
      int admire [] = new int[n+1];
      for (int i = 1; i < admire.length; i++) {
          admire[i] = in.nextInt();
      }
      //记录每个动物的最高分数 0 ~ n。下标0 舍弃 1~n 动物的最高分
      int maxScore [] = new int[n+1];
      //计算第i动物的最高分 尽可能让这个号的动物多票数
      for (int i = 1; i <= n; i++) {
          //第j号动物 尽量投i
          for(int j = 1;j <= n;j++){
              if(j == i){
                  //自己不管咋样 都要投自己 才可能最高
                  maxScore[i]++;
              }else{
                  //j != i 时 想让j给i投票
                  //j号 看崇拜那个?
                  //j的明星
                  int fans = j;
                  int star = admire[fans];
                  while(star != 0){
                      if(star == i){
                          maxScore[i]++;
                          break;
                      }
                      fans = star;
                      star = admire[fans];
                  }
              }
          }
      }

      for (int i = 1; i < maxScore.length; i++) {
          System.out.println(maxScore[i]);
      }
  }

2.書き留めていない。

元の記事を72件公開 Likes0 Visits 720

おすすめ

転載: blog.csdn.net/weixin_40300702/article/details/105529732