ブルーブリッジカップの練習A

/ *
問題の説明
  列のN個の長さを考えると、列のこの数が大きい順に配置されています。1 <= N <= 200
入力フォーマット
  最初の行の整数n。
  2行目は含まnは整数は、数が、10,000未満の整数の絶対値のそれぞれをソートします。
出力フォーマットの
  出力ライン、ソートされた出力の昇順に列の数。
サンプル入力
。5
。8 4. 3. 6. 9
サンプル出力
34689
* /

#include <stdio.h>


int main(){
	int n;
	int i,j;
	scanf ( "%d",&n );
	int m[n]; 
	for ( i =0;i < n; i ++ ) {
		scanf ( "%d",&m[i] );
	}
	
	for ( i = 0;i < n; i ++ ) {
		for ( j =0;j < i; j ++) {//1 3 4 2
			if ( m[i] < m[j]) {
				int temp = m[i];
				m[i] = m[j];
				m[j] = temp;
			}
		}
	}
	
	for ( i = 0;i < n;i ++ ) {
		printf ( "%d ",m[i]);
	} 
	
	return 0;
} 

/ *
問題の説明
  123321は、それが同じ右から、リード左から読み込まれ、非常に特別な番号です。
  、正の整数nを入力し、すべてのそのようなプログラミング5および6進数、数字を検索し、nは全てが等しい満たします。
入力フォーマットの
  入力ラインは、正の整数nを含んでいます。
出力形式
  条件を満たす整数、ライン毎の各整数小から大出力するためです。
入力サンプル
52
サンプル出力
899 998
989 989
998 899
データサイズと表記
  1 <= N <= 54。
* /

#include <stdio.h>

int main() {
	int num;
	int i;
	int a,b,c,d,e,f;
	
	scanf ( "%d",&num );
	
	for ( i = 10000; i < 1000000; i ++ ) {
		if ( i < 100000 ) {
			a = i/10000;
			b = i%10000/1000;
			c = i%1000/100;
			d = i%100/10;
			e = i%10;
			if ( a+b+c+d+e == num && a == e && b == d ) {
				printf( "%d\n", i );
			}
		}
		else {
			a = i/100000;
			b = i%100000/10000;
			c = i%10000/1000;
			d = i%1000/100;
			e = i%100/10;
			f = i%10;
			if ( a+b+c+d+e+f == num && a == f && b == e && c ==d ) {
				printf( "%d\n", i );
			}
		}
	}
	
	return 0;
} 

/ *
問題の説明
  1221年にはそれがすべてのように4桁の10進数をプログラミング求めて、読んで、左から右などから読み込まれ、非常に特別な番号です。
出力フォーマットの
  昇順で条件を満たし、出力4つの10進数。
* /

#include <stdio.h>

int main() {
	int n = 0;
	int i,j;
	int a,b,c,d;
	int num[1000];
	
	for ( i = 1000; i < 10000; i ++ ) {
		a = i/1000;
		b = i%1000/100;
		c = i%100/10;
		d = i/10;
		if ( a == d && b == c ) {
			num[n++] = i;
			printf ( "%d");
		}
	}
	
	for ( i = 0; i < n; i ++ ) {
		for ( j = 0; j < i; j ++ ) {
			if ( num[i] < num[j] ) {
				int temp = num[i];
				num[i] = num[j];
				num[j] = temp;
			}
		}
	} 
	
	for (  i = 0; i < n; i ++ ) {
		printf( "%d ", num[i] );
	}
	
	return 0;
}

/ *
153は、立方晶と各桁と同じである非常に特別な番号、すなわち、153 = 1である。1 1 + 5 。5 5 + 3 3 3 すべての3つの小数の需要のプログラミングは、この条件を満たすことができます。
出力フォーマット
行あたり各番号の昇順に条件を満たす出力3進数。
* /

#include <stdio.h>

int main() {
	int i;
	int a,b,c;
	
	for (  i = 100; i < 1000; i ++ ) {
		a = i/100;
		b = i%100/10;
		c = i%10;
		if ( ( a*a*a + b*b*b + c*c*c ) == i ) {
			printf ( "%d\n", i );
		}
	}
	
	return 0;
}

/ *問題説明
パスカルの三角形として知られているトライアングル、その最初の行I + 1(+ b)があるI-膨張係数。

それは重要な特性である:各数値は、一緒にその2つの肩番号に等しい三角形。
私たちは、最初の4行トライアングルの下に与えられています。

1
。1 1 
1 2 1 
。1. 3. 3. 1
 
N与え、第n行、それを出力します。

入力フォーマットの
数nを含む入力。

出力フォーマットの
最初のn行トライアングルの出力。最初の行から各行が一つの中間スペースを使用し、順次出力数です。前に余分なスペースを印刷しないでください。
入力サンプル
4
サンプル出力
1
。1 1
1 2 1
。1. 3. 3. 1
のデータサイズと表記
1 <= N <= 34。* /

#include <stdio.h>

#define N 100

int main() {
	int n;
	int num[N][N];
	int i,j,k;
	scanf ( "%d",&n );
	
	for ( i = 0; i <= n; i ++ ) 
		num[i][1] = num[i][i] = 1;
	
	for ( i=3; i <= n; i ++ )
    	for( j=2; j <= i-1; j ++ )
            num[i][j] = num[i-1][j-1] + num[i-1][j];
    
    for ( i=1; i <= n; i ++ ) {
        for(j=1;j<=i;j++)  /*j<=i的原因是不输出其它的数,只输出我们想要的数*/
            printf("%d ",num[i][j]);
        
        printf("\n");  /*当一行输出完以后换行继续下一行的输出*/
    }
    printf("\n");
    
    return 0;
}

/ *
問題の説明
与えられたn列の数を含む整数であり、最初のいくつかの最初の発生の列の最初の整数を尋ねます。

入力フォーマットは、
最初の行は整数nを含んでいます。

第二行は列の所定の数の非負整数nを含み、各列数は、10,000以下です。

第3段目は、整数A、検索対象の番号を含みます。

出力フォーマット
番号が列に表示された場合、それはそうでなければ出力、出力位置(位置番号は1から始まり)の最初の発生である-1。
サンプル入力
。6
。1. 8 9 4. 3. 9
。9
サンプル出力
2
のデータサイズと表記
1 <= N <= 1000。
* /

#include <stdio.h>

int main() {
	int m,n,i,findNum;
	int flag = 0;
	
	scanf ( "%d", &m );
	int num[m];
	
	for ( i = 0; i < m; i ++ ) {
		scanf ( "%d", &n );
		num[i] = n;
	} 
	
	scanf ( "%d", &findNum );
	
	for ( i = 0; i < m; i ++ ) {
		if ( findNum == num[i] ) {
			flag = 1;
			printf( "%d", i+1 );
			break;
		}
	}
	if ( flag == 0 ) {
		printf ( "-1" );
	}
	return 0;
}

/ *
問題の説明
番号を与えられ、N、Nの最大値、最小値の数を見つけるために、そして。

入力フォーマット
nは整数最初の行動の、値の数。

第二行は10,000以上Nの数、各数の絶対値が与えられ、数nを有しています。

出力フォーマット
出力整数の3行。最初の行は、これらの数の最大値を表し、第二行はこれらの数の最小値を表し、これらの数字は、第三の行を表し、。
サンプル入力
。5
。1. 4. 3 -2。5
出力例
5
-2
。11
データサイズと表記
1 <= N <= 10000。
* /

#include <stdio.h> 

int main() {
	int n,i,m,maxNum,minNum,addNum = 0;
	scanf ( "%d", &n );
	int num[n];
	for ( i = 0; i < n; i ++ ) {
		scanf ( "%d", &m );
		num[i] = m;
	}
	
	maxNum = num[0];
	minNum = num[0];
	
	for ( i = 1; i < n; i ++ ) {
		if ( num[i] > maxNum ) {
			maxNum = num[i];
		}
	}
	
	for ( i = 1; i < n; i ++ ) {
		if ( num[i] < minNum ) {
			minNum = num[i];
		}
	}
	
	for ( i = 0; i < n; i ++ ) {
		addNum += num[i];
	}
	
	printf( "%d\n",maxNum );
	printf( "%d\n",minNum );
	printf( "%d\n",addNum );
	
	return 0;
}

/ *
問題記載
文字を用いた例が下に与えられている、いくつかの美しいグラフィックで構成することができます。

ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC

これは、このルールのパターンを見つけ、パターン列5~7であり、n行m列のパターンを出力します。

入力形式の
二つの整数nとmを含む入力ラインは、それぞれあなたが出力ラインパターンをする列の数を表します。
出力フォーマットの
あなたのパターンのための出力n行、各m文字、。
入力サンプル
57
サンプル出力
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABCの
データサイズと表記
1 <= N、M <= 26。
* /

#include <stdio.h>

int main() {
	int row; // 行
	int col; // 列
	int index = 0; // 控制索引
	char c,r,s;
	scanf ( "%d %d", &row,&col ); 
	for ( c = 'A'; c < 'A' + row; ++c ) {
		// 先输出前半部分 A 之前 倒序 如 第三行 输出CB
		for ( r = c; r > 'A' && index < col; --r ) {
			printf ( "%c", r );
			index++ ;
		}
		// 然后输出 后半部分 A开始的 为列数减去index有已输出的
		for ( s = 'A'; s < 'A' + col - index; ++ s ) {
			printf ( "%c", s );
		}
		index = 0;
		printf ( "\n" );
	}
	return 0;
}

/ *
問題の説明
5の01ビット長の文字列のため、各ビットは、可能な32の合計は0または1であってもよいです。彼らは、最初のいくつかのとおりです。

00000

00001

00010

00011

00100

32出力が小さいから大へ順次ストリング01によって要求されました。

入力形式
存在なし入力質問。
出力フォーマット
ストリング5の各線路01の長さの昇順で出力線32、。
サンプル出力
00000
00001
00010
00011
<省略し、次の部品>
* /

#include <stdio.h>

int main() {
	
	int a,b,c,d,e;
	for ( a = 0; a < 2; a ++ ) 
		for ( b = 0; b < 2; b ++ )
			for ( c = 0; c < 2; c ++)
				for ( d = 0; d < 2; d ++ )
					for ( e = 0; e < 2; e ++ )
						printf ( "%d%d%d%d%d\n",a,b,c,d,e );
	return 0;
}

/ *
問題の説明
年を決定するために年を考えるには、うるう年ではありません。

次のいずれかの条件が満たされると、今年はうるう年であります:

  1. 年は4の倍数でなく、100の倍数ではありません。

  2. 年は、400の倍数です。

その他の年はうるう年ではありません。

入力形式の
入力は、現在の年を表し、整数yを含んでいます。
出力フォーマット
出力ライン、与えられた年がうるう年の場合、出力はい、そうでない場合は出力することはできません。
注:結果として指定された質問の文字列をエクスポートすると(この質問yesまたはnoとして、あなたは厳密に与えられた場合の質問を実行する必要があり、間違った場合は、ポイントを獲得しません。

サンプル入力
2013
サンプル出力
なし
サンプル入力
2016
サンプル出力
はい
合意のデータサイズ
1990 <= Y <= 2050。
* /

#include <stdio.h>

int main() {
	int year;
	scanf ( "%d", &year );
	if( year % 4 == 0 && year % 100 != 0 ){
		printf ( "yes" );	
	}
	else if ( year % 400 == 0 ) {
		printf ( "yes" );
	}
	else {
		printf ( "no" );	
	}
	return 0;
}

/ *
問題の説明
  入力の正の整数nは、出力のn!の値。
  前記N- !. 1 = 2。3のn * ... *。
アルゴリズム記述は、
  N!可能大きいが有限の整数の範囲の表現はコンピュータであることができ、この方法は、高精度計算を使用する必要があります。アレイの使用は、大きな整数aを表すために、A [0]ビット、A [1]で表される10を表し、等々 。
  整数kで配列Aの各要素はK、対応する音符処理キャリーによって乗算さとなる乗算されます。
  まず、図1に示す値!nを求めるために、すなわち、nに乗算3で、次いで2により、設定されています。
入力形式の
  入力は、正の整数N、N <= 1000を含んでいます。
出力フォーマット
  出力のn!正確な値。
入力サンプル
10
サンプルの出力
3628800
* /

解決策1:コンテストに少ない計算量を適用渡しません

#include <stdio.h>

int main() {
	int num;
	int i,temp = 1;

	scanf ( "%d", &num );
	temp = num;
	for ( i = temp-1; i > 0; i -- ) {
		num = num*i;
	}		
	
	printf ( "%d", num );
	
	return 0;
}

対処方法2:による競争

#include <stdio.h>
 
int main()
{
    int n;
    int factorial[3000] = { 0 };
    int len;
    int i, j, carry, dump;
 
    scanf("%d", &n);
 
    factorial[0] = 1;
    len = 1;
    for (i = 2; i <= n; ++i)
    {
        carry = 0;
        for (j = 0; j < len; ++j)
        {
            dump = (factorial[j] * i + carry) / 10;
            factorial[j] = (factorial[j] * i + carry) % 10;
            carry = dump;
        }
        while (carry > 0)
        {
            factorial[j] = carry % 10;
            carry /= 10;
            ++j;
        }
        len = j;
    }
 
    for (i = len - 1; i >= 0; --i)
        printf("%d", factorial[i]);
 
    return 0;
}
リリース6元記事 ウォンの賞賛0 ビュー150

おすすめ

転載: blog.csdn.net/weixin_43217271/article/details/103926923