プログラム設計入門基礎プログラミング問題一---c言語

8988 ワード

直扣题意暴力解法
1.近似値
【問題の説明】πの近似値は以下の式で計算できることが知られている.πの近似値eが与えられ、プログラミングは以下の式を用いてeに最も近い近似値πと反復回数n(1以上)を求める.π/2=(2/1 x 2/3)x(4/3 x 4/5)x(6/5 x 6/7)x…x[2 n/(2 n-1)x 2 n/(2 n+1)]【入力形式】コンソールからe(eは2.6666667より大きく、3.14159より小さい)の値を入力する.【出力形式】eに最も近い近似値πを出力し、反復回数n(1つのスペースで区切られ、πを出力するときは小数点以下9桁の有効数字を保持する必要がある)を出力する.【サンプル入力1】3.1201【サンプル出力1】3.120149087【サンプル1説明】入力されたπの近似値eは3.1201であり、nが35のときに算出されるπ値は3.119547206であり、与えられたe値との差の絶対値は0.000552794である.nが36の場合、計算されたπ値は3.1201490087であり、与えられたe値との差の絶対値は0.0000499087であり、nが36の場合、nが35の場合よりも求められたπ値が与えられたe値に近いことがわかる.また、nが36の場合に求められるπ値は、与えられたe値よりも大きくなり、nが増大し続けると求められるπ値は増加するので、上記の計算式で求めたeに最も近い近似値は3.120149087であり、対応する反復回数は36である.
このような問題は明らかに問題の意味に従って下へやればいいだけで、問題の意味の中のデータの法則を観察して、数学の法則を利用して問題を解いて、条件が料理を混ぜないことを保証して、はっきり考えてから手を出して、多くいくつかの問題を訓練して熟練して巧みになりました.(注意データ入出力の種類)
#include
int main()
{
	double n = 1;
	double e = 0, sum = 1, temp = 1;//      Π      n       
	scanf("%lf", &e);
	while (e - 2 * sum >= 0)
	{
		temp = sum;
		sum *= 4 * n * n / (4 * n * n - 1);
		n++;
	}
	if (2 * sum - e > e - 2 * temp)
		printf("%.9lf %.0lf", 2 * temp, n - 2);
	else 
		printf("%.9lf %.0lf", 2 * sum, --n);
	return 0;
}
  • 反復
  • 反復クラス問題についてはデータオーバーフローを避け,過大な数値計算があれば自己構築反復サブ関数を用いないほうがよく,実際に過大はlong longタイプまたはdoubleタイプで格納する.
  • フィボナッチ数列に類似する基礎問題
  • /%との多様な使い方
    %と異なる桁数の数字を1から分離する.すいせんすう
    古典的な基礎を比較するのは水仙数の1つの3桁の10進数の整数であるべきで、もしその3桁の数字の立方とこの数の数値に等しいならば、それを1つの“水仙数”【入力形式】と呼んでコンソールから2つの整数(スペースで分割する)を入力して、それぞれデータ範囲の下限mと上限nを表して、しかも0<=m<=n<=10000を満たします.【出力形式】このデータ範囲内(データの上下限を含む)の全ての「スイセン数」をコンソールに出力し、1行に小さい順に表示し、各数の間をスペースで分割する.【サンプル入力1】50 370【サンプル出力1】153 370【サンプル1説明】入力データ範囲下限50、上限370.水仙数は3桁であることが要求されるため、実際には100~370の水仙数を求めるが、13+53+33=153、33+73+03=370であるため、この範囲内の水仙数は153と370(上限370を含む)である.
    #include
    int main()
    {
    	int m, n,num=0;
    	scanf("%d%d", &m, &n);
    	int sum = 0,temp;
    	for (; m <= n; m++)
    	{
    		num = m;
    		sum = 0;
    		temp = 10000;
    		while (temp >=10)
    		{
    			temp /= 10;
    			sum += num / temp * (num / temp )*( num / temp);//    
    			num -= num / temp * temp;
    		}
    		if (sum == m) 
    			printf("%d ", m);//                    
    	}
    	return 0;
    }