ブルーブリッジカップに関する質問

雹の数【シミュレーション、2016年、地方大会】

任意の正の整数 N が与えられると、

偶数の場合は、N/2 を実行します。

奇数の場合は、N×3+1を実行します。

生成された新しい番号は同じアクションを再度実行し、サイクルが繰り返されます。

観察すると、この数値は一時的に高い水準に上昇しますが、その後再び低下することがわかります。

このように上がったり下がったりしますが、最終的には「1」まで下がります。これは、あられ雲の中で小さなひょうの粒子が転がりながら成長する様子に似ています。

たとえば、N=9、

9,28,14,7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1

N=9 のとき、この「小さなひょう石」は最高で 52 の高さまで急上昇したことがわかります。

説明を入力してください

正の整数) N (N<106) を入力します。

出力の説明

ひょう石の数を変換処理した後、最大値がどのくらいになるかをN以下の正の整数で出力します。

入力サンプルと出力サンプル

入力

10

出力

52

動作限界

言語 最大実行時間 最大実行メモリ
C++ 1秒 256M
C 1秒 256M
ジャワ 2秒 256M
Python3 15秒 256M
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  long long int n,max=0;
  scanf("%lld",&n);
  for(long long int i=2;i<=n;i++){
    long long int t=i;
    while(t!=1){
      if(t&1){t=t*3+1;}
      else {t>>=1;}
      if(t>max){max=t;}
    }
    
  }
  printf("%lld",max);
  return 0;
}


ISBN番号(アナログ、紐、2008年、NOIP人気グループ)

トピックの説明

正式に出版された書籍には、それぞれに対応する ISBN 番号が割り当てられています。ISBN コードは、9 桁の数字、1 つの識別コード、および 3 つの区切り記号で構成されています。規定の形式は「x-xxx-xxxxx-x」で、記号「-」が区切り文字 (キーボードのマイナス記号)、最後の桁は識別コードです。たとえば、0-670-82162-4 は標準の ISBN コードです。ISBN コードの最初の桁は、書籍の出版言語を示します (英語の場合は 0 など)。最初の区切り文字「-」の後の 3 桁は出版社を表します (たとえば、Virgin Press の場合は 670)。2 番目の区切り文字の後の 5 桁は、出版社の本のシリアル番号、最後の桁は識別コードです。

識別コードは次のように計算されます。

最初の桁に 1 を掛け、2 番目の桁に 2 を掛けます... 同様に、得られた結果 mod 11 を使用し、余りが識別コードです。余りが 10 の場合、識別コードは大文字の X になります。 。たとえば、ISBN 番号 0-670-82162-4 の識別コード 4 は、次の方法で取得されます。067082162 の 9 つの数字について、左から右に、それぞれ 1、2、...、9 を掛けます。そしてそれらを合計します。つまり、0×1+6×2+……+2×9=158、そして158 mod 11の結果4を識別コードとして受け取ります。あなたの仕事は、入力された ISBN 番号の識別コードが正しいかどうかを判断し、正しい場合は のみを出力し、 Right間違っている場合は正しいと思われる ISBN 番号を出力するプログラムを作成することです。

説明を入力してください

書籍の ISBN 番号を表す一連の文字である行を入力します (入力が ISBN 番号の形式要件に準拠していることを確認してください)。

出力の説明

入力されたISBN番号の識別コードが正しい場合は1行で出力し、Rightそうでない場合は指定された形式に従って正しいISBN番号(区切り文字「-」を含む)を出力します。

入力サンプルと出力サンプル

例1

入力

0-670-82162-4

出力

Right

例 2

入力

0-670-82162-0

出力

0-670-82162-4 

動作限界

  • 最大実行時間: 1秒
  • 最大実行メモリ: 128M

#include<stdio.h>
int main(){
  char arr[14],ch[12]="0123456789X";
    scanf("%s",arr);
      int i,j=1,sum=0;
        for(i=0;i<12;i++){
            if(arr[i]=='-')continue;
                sum+=(arr[i]-'0')*(j++);
                  }
                    if(ch[sum%11]==arr[12])printf("Right");
                      else {arr[12]=ch[sum%11];
                              printf("%s",arr);}
                              return 0;
                              }

おすすめ

転載: blog.csdn.net/m0_74154295/article/details/130300858