PAT(初級)実践(中国)初心者(1)C

(3N + 1)推測1001の殺さ魅力(15ポイント)C言語

Kharazi(Callatz)の推測:

任意の正の整数nに対して、それが偶数である場合、それは半分に、半分が奇数の場合、(3N + 1)カット。これを繰り返し、最後にn = 1のステップで取得するようになった、切断されています。数学の1950 World CongressでKharaziは、この推測を発表しました伝説のエール大学の教師と学生啓東元だった、必死にこの一見愚かな素朴な命題を証明したい、学生は不注意そんなにノイズ研究、1枚ののみのカードを結果(3N 1)、一部の人々は、これは陰謀であると言うので、Kharaziが意図的にアメリカの数学教育と研究の進展を遅らせた......

私たちの話題は本日、証拠民家ラズ予想ではなく、任意の正の整数で千を超えないN、単に= 1つの必要性のn取得する方法を多くの手順(いくつかのカット)、数を数えますか?

入力フォーマット:
各テストは、テスト入力、すなわち、値任意の正の整数Nを含みます。

出力フォーマット:
必要なステップ数をN-1から出力計算。

サンプル入力:

3

出力例:

5

オリジナルタイトルリンク

アイデア:
指定されたタイトルを読み出すN、次に決意をループセグメントながら繰り返さNである1

  • nが1の場合、ループは終了します。
  • ruguonは1ではない場合でも、2に加えて、Nように、偶数であるNか否かが判定され、nは次数(3 * N +)/ 2、そうカウンタカウント後1によるもの。
  • ときにループが終了すると、カウント値が答えです。
#include <stdio.h>
int main(){
	int n,count=0;
	scanf("%d",&n); //输入n 
	while(n!=1){ //循环判断n是否为1 
		if(n%2==0) n=n/2; //如果是偶数 
		else n=(3*n+1)/2; //如果是奇数 
		count++; //计数器加1 
	}
	printf("%d\n",count);
	return 0;
} 

これは強いショベル1032(20分)

強力なエンドでの事実ショベルどちらを説明するために、PATの掘削機は、スキルの競争を組織しました。今最強の専門学校の統計は、競争の結果に基づいていること。

入力フォーマット:
入力線1は、N個の整数のエントリ、すなわち数をこれ以上5 ^ 10より正与えられます。次いで、Nラインは、それぞれ、すべての参加者は、彼らが(連続番号1から始まる)番号を表し、学校などの情報や結果を、与えられ、ゲームのスコア(パーセンタイル)、スペースで区切ら。

出力フォーマット:
スペースで区切られた、とのうち、最も高い合計スコアライン数の学校を与えられました。唯一の答えは、被写体が結ばれていないことを確認することです。

サンプル入力:

6
3 65
2 80
1 100
2 70
3 40
3 0

出力例:

2 150

オリジナルタイトルリンクの
アイデア:

  • 注文アレイ学校[10010]記録された各学校のスコア、それに対応する各リード学校ザシルドスコアスコアについて0の初期値は、その学校ので[SCHID] + =スコア。
  • 変数kが学校の外の最高数を記録してみましょう、変数MAXは最高の合計スコア、-1の初期値を記録します。学校が連続して番号が付けられているので、その米国のドラマ番号1〜Nは、KおよびMAXは常に更新することができます。
#include <stdio.h>
int school[100010]={0}; //记录每个学校的总分 
int main(){
	int n,i,schID,score;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d %d",&schID,&score); //学校ID、分数 
		school[schID] += score; //学习schID的总分增加score 
	} 
	int k=1,MAX= -1; //总得分最高的学校的编号、及其总分 
	for(i=0;i<=n;i++){ //从所有学校中选出总分最高的一个 
		if(school[i]>MAX){
			MAX = school[i];
			k=i;
		}
	} 
	printf("%d %d\n",k,MAX); //输出总得分最高的学校的编号、及其总分 
	return 0;
}

分類番号1012(20分)

、正の整数の系列に与えられたデジタル分類のための需要を押すと、次の5つの数字を出力します。

  • A1 =数は5で割り切れる、すべてさえができます。
  • 2 = 5和で除算した後にデジタル剰余であろう所定の順序をインターリーブ、つまり、計算N1-N 2 + N 3 -N 4⋯。
  • 3 = 5の他の数数2以上です。
  • 添加の4 =平均数は、小数点の場所に正確3後より5桁です。
  • 5添加後に=より数4の最大数よりも5。

入力フォーマット:
各入力テストを含みます。各テストケースは、正の整数を分類するために、1000を超えることはないではない1000以上のNの最初の正の整数を与えられ、その後、Nを与えています。数字の間のスペースで区切られています。

出力フォーマット:
N整数任意の正は、請求項1〜A 5及びAが順次行に出力する対象に応じて算出されます。スペースで区切られた数字が、ラインの端部との間に余分なスペースを持っていないかもしれません。

もし番号が存在しない、請求特定のタイプ、対応する位置Nに出力

サンプル入力1:

13 1 2 3 4 5 6 7 8 9 10 20 16 18

出力サンプル1:

30 11 2 9.7 9

サンプル入力2:

8 1 2 4 5 6 7 9 16

出力サンプル2:

N 11 2 N 9

オリジナルタイトルリンクの
アイデア:

  • それは難しいが、非常にピットではありません。
  • 間違った例で始まる、専用の共有にユーザーを見つけるためにピットを見て、
  • そして、a2が0にずらし、それが存在しないという意味ではありませんので、まだA2の数をカウントする必要があります。
#include <stdio.h>
int main(){
	int N,i;
	while(scanf("%d",&N)!=EOF){
		int a1=0,a2=0,a21=0,a3=0,a4=0,a41=0,a5=0,num,re = 1;
		for(i=0;i<N;i++){
			scanf("%d",&num);
			if(num%10==0) a1+=num; //能被5整除的数字中所有偶数的和
			if(num%5==1){ //将被5除后余1的数字按给出顺序进行交错求和 
                a21++;
				if(a21%2==1) a2 += num; //奇数个相加 
				else a2 -= num; //偶数个相减 
			}
			if(num%5==2) a3++;
			if(num%5==3){
				a4 += num; //A4求合 
				a41++; //计数 
			}
			if(num%5==4){
				if(num>a5) a5=num;
			}
		}
		if(a1) {printf("%d ",a1);} else {printf("N ");}
    	if(a21) {printf("%d ",a2);} else {printf("N ");} //判断a21,坑点!!
    	if(a3) {printf("%d ",a3);} else {printf("N ");}
    	if(a41) {printf("%.1lf ",(double)a4/a41);} else {printf("N ");}
    	if(a5) {printf("%d\n",a5);} else {printf("N\n");}
	}
	return 0;
}

1016パートA + B(15分)

正の整数は「D A(整数として)の部分は、」すべての新しい整数P A. A D A組成物として定義されます 例:A = 3862767が与えられると、D A = 6は、次に「部分6「はP A A 66である2 A 6があるためです。

今A、D A、Bが与えられると、D Bは、P A + P Bを計算するプログラムを書きます

入力フォーマット:
入力シーケンスが行Aに与えられ、D A、B、D Bは、 0 <A、B <10 ^、空白で区切られた 10。

出力形式:
出力値P A + P Bは、行にあります。

サンプル入力1:

3862767 6 13530293 3   

出力サンプル1:

399

サンプル入力2:

3862767 1 13530293 8

出力サンプル2:

0

オリジナルタイトルリンク
アイデア

  • A、strlenを介してでBは、文字列として定義されている()は、文字列の長さを取得します
  • トラバーサル文字列は、デジタル、最終合計値に変換し、同じ文字を見つけます
#include <stdio.h>
int main(){
	char a[100],b[100];
	int d1,d2,i,p1=0,p2=0;
	scanf("%s %d %s %d",a,&d1,b,&d2); 
	for(i=0;i<strlen(a);i++){
		if(a[i]==d1+'0') 
			p1=p1*10+d1;
	}
	for(i=0;i<strlen(b);i++){
		if(b[i]==d2+'0') 
			p2=p2*10+d2;
	}
	printf("%d\n",p1+p2);
	return 0;
} 

ハンマー1018ハサミ(20分)

ルールの図の結果に示されるように、それらの両方ギブジェスチャー:私たちは、「ハンマーとはさみ」のゲームをプレイすることができるはずです。
01

今、二人の男がレコードを衝突与えられ、両方の勝利、フラット、負の数、および双方の統計は、ジェスチャーの勝利の最大のチャンスを与えるものです。

入力フォーマット:
入力ライン1は、N(≤10^ 5)、すなわち整数陽性を与え、両方の対立の数。次いで、N行、各行は、すなわち、同時にジェスチャーとB側が与えられ、情報対立を与えます。Cは、「ハンマー」を表す代表J「はさみ」、Bは「布」を表し、最初の文字は第二者に代わって、パーティを表し、中間スペースがあります。

出力形式:
出力1行目と2行目は、A、Bの勝利、平坦な、負の値を与えられているが、インターデジタルスペースで区切ら。ライン3に示す2つの文字はA、Bは、ジェスチャの最大数を獲得し、中間スペースがある表します。解決策は、アルファベット順に出力最小ソリューション一意でない場合。

サンプル入力:

10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J

出力例:

5 3 2
2 3 5
B B

オリジナルタイトルリンク
アイデア

  • この問題は難しくありませんが、統計的な出力レベルは、慎重に勝利することをすると
#include <stdio.h>
char max(int B,int C,int J){
	if(B>=C && B>=J) return 'B';
	if(C>B && C>=J) return 'C';
	return 'J';
}
int main(){
	int n,i;
	int a=0,b=0,c=0,a1=0,b1=0,c1=0,d=0;
	char T,F;
	scanf("%d",&n); //双方交锋的次数
	for(i=0;i<n;i++){
		scanf(" %c %c",&T,&F); //甲、乙双方同时给出的的手势,请注意每%c之前的空格 
		if(T=='B'&&F=='C')	a++;
        if(T=='C'&&F=='J')	b++;
        if(T=='J'&&F=='B')	c++;
        if(T=='B'&&F=='J')	c1++;
        if(T=='C'&&F=='B')	a1++;
        if(T=='J'&&F=='C')	b1++;
        if(T==F)	d++;
	}
	printf("%d %d %d\n",a+b+c,d,a1+b1+c1); //甲的胜、平、负次数
	printf("%d %d %d\n",a1+b1+c1,d,a+b+c); //乙的胜、平、负次数
	printf("%c %c",max(a,b,c),max(a1,b1,c1)); //甲、乙获胜次数最多的手势 
	return 0;
}
リリース5元の記事 ウォンの賞賛0 ビュー1684

おすすめ

転載: blog.csdn.net/m0_46153949/article/details/104002969