(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分)
ルールの図の結果に示されるように、それらの両方ギブジェスチャー:私たちは、「ハンマーとはさみ」のゲームをプレイすることができるはずです。
今、二人の男がレコードを衝突与えられ、両方の勝利、フラット、負の数、および双方の統計は、ジェスチャーの勝利の最大のチャンスを与えるものです。
入力フォーマット:
入力ライン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;
}