実施例4自己陶酔数
タイトル説明
3桁の整数(999から100)、及び各桁は「水仙の数」と呼ばれる数値そのもの、の3乗に等しい場合(例:153 = 1 3 + 5 3 + 3 3)、全てが検索のいくつか。
入力形式
入力しないでください
出力フォーマット
一桁のいくつかのライン。
サンプル入力
ノー
サンプル出力
153
* * *
...
* * *
(出力が調和されています)
(1)1つのプログラミングのアイデア。
3桁のn(nは999から100の間の整数である)、網羅的であること。n個の各列挙、の100(= N / 100)、10 B(B = N / 10〜10%)とビットC(C = N%10)、* YESであれば分解次に* + B * B * B + C * C * C == N、水仙の数です。
(2)ソース。
書式#include <stdio.hに>
メインint型()
{
INT、N、A、B、C; // nは、a、b、cは3桁自体とその百、及び10ビットであります
ため(N = 100であり; n <= 999; N ++)
{
= N / 100。
B = N / 10%10。
C = N%10。
IF(* + B * B * B + C * C * C == N)
printf( "%dの\ N"、N)。
}
0を返します。
}
(3)2つのプログラミングのアイデア。
することが乏しい百桁3(1~9の範囲)、10 B(Bは0〜9の範囲である)と3重ループを有するCビット(0から9までのCの範囲)ため、ループの本体に、3桁のN(N = 100×A + 10 * B + C)を算出し、ミートA * + B * B * B + C * C * Cか否かを判断します== N、次にN水仙の数です。
(4)2ソース。
書式#include <iostreamの>
名前空間stdを使用。
メインint型()
{
INT、N、A、B、C; // nは、a、b、cは3桁自体とその百、及び10ビットであります
用(= 1; <= 9; ++)
用(B = 0; B <= 9; B ++)
用(C = 0; C <= 9、C ++)
{
N = 100×A + 10 * B + C。
IF(* + B * B * B + C * C * C == N)
printf( "%dの\ N"、N)。
}
0を返します。
}
問題4
4-1サブ整数
この質問はロス・バレー試験(https://www.luogu.org/problem/P1151)から選択され、
タイトル説明
5桁の数字Aの1 A 2 A 3 A 4 A 5は、三つのサブ数に分割することができます。
=のSub1を1の2の3
=のSUB2 2の3の4
=のSUB3 3の4の5
例えば、番号20207は、5つに分割されてもよいです
SUB1 = 202
SUB2 = 020(= 20)
SUB3 = 207
今、K整数正を与え、プログラミングでは、これらの三つのサブ桁の番号SUB1、SUB2、SUB3 Kが割り切れるであり得ることを条件として、以下の5つの条件が10,000〜30,000のある満たしていることがすべての数値を得るために必要。
入力形式
正の整数K
出力フォーマット
各行為は、条件の5桁の数字は、大出力に小さなから、要件を満たしています。出力を複製または欠落していません。いいえソリューション、出力「いいえ」の場合。
サンプル入力
15
サンプル出力
22555
25555
28555
30000
(1)プログラミングのアイデア。
タイトルキーは、サブ三から五数N、SUB2、SUB3とのSUB1数を単離します。高いSUB1のでnは3桁、従って、SUB1 = N / 100; SUB2中間体nが3ビット、従って、SUB2 = N / 10%1000; SUB3の低いnは3桁、従って、SUB3 = n個の%1000年。
以下のために循環(N = 10000; N <= 30000; N ++)各n桁については網羅的であることを決定しました。
(2)ソース。
書式#include <stdio.hに>
メインint型()
{
INT I、SUB1、SUB2、SUB3、K、F = 0。
scanf関数( "%のD"、&K);
以下のために(私は10000 =; I <= 30000; I ++)
{
SUB1 = I / 100;
SUB2 = I / 10%1000;
SUB3は私%1000 =。
IF(SUB1%K == 0 && SUB2%K == 0 && SUB3%K == 0)
{
printf( "%d個\ n" は、I);
F = 1。
}
}
もし(F == 0)のprintf( "いいえ\ N");
0を返します。
}
4-24ビットセグメントの数の二乗
タイトル説明
数は2ビットと二乗で割っ2に等しく、4つのセグメントの数の二乗呼び出された場合、図4に示すように、2前後2ビットの自然数に分割されます。例えば、2025 =(20 + 25)2。
すべての4つのセグメントと数の二乗を取得するためのプログラムを書きます。
入力形式
入力しないでください
出力フォーマット
一桁のいくつかのライン。
サンプル入力
ノー
サンプル出力
2025
* * *
...
* * *
(出力が調和されています)
(1)1つのプログラミングのアイデア。
全ての整数のためのN網羅4、nは9000の総数は、1000〜9999の範囲です。各数nは、高い2桁X(X = N / 100)と低い二桁Y(Y = N%100)、次いで、裁判官を分離する場合に満足N ==(X + Y)*( X + Y)は、nは4ビットのセグメントと二乗数です。
(2)ソース。
書式#include <stdio.hに>
メインint型()
{
整数nは、X、Y。
ため(N = 1000、N <= 9999であり; n ++)
{
X = N / 100。
そして、N = 100%。
IF(N ==(X + Y)*(X + Y))
printf( "%dの\ N"、N)。
}
0を返します。
}
(3)2つのプログラミングのアイデア。
アイデア網羅番号1は9000倍です。4つのセグメントと数の二乗が最初平方数でなければならないので、実際には、4ビットの網羅正方形、すなわち網羅SQRTであることのみが必要であるSQRT間(1000)番号(9999)〜ループの本体に、最初の4桁を算出N = *、次に高い2桁X(X = N / 100)、次いで、低二桁のY(Y = N%100)、分離決定は、==(X + Y)を満たす場合には、nは4ビットのセグメントと二乗数です。明らかに、そのような網羅的、サイクル時間が大幅に削減されるであろう。
(4)2ソース。
書式#include <stdio.hに>
書式#include <math.h>の
メインint型()
{
X、Y、INT、N。
用(=(INT)SQRT(1000); <=(INT)SQRT(9999); ++)
{
N = *。
X = N / 100。
そして、N = 100%。
IF(== X + Y)
printf( "%dの\ N"、N)。
}
0を返します。
}
4-3特定の4桁
タイトル説明
そのようなAの具体的な4桁の番号があり、それは千のだと10桁の番号が101デジタル製品桁の和に等しいです。例えば、3136、* 3 1 + 3 = 6、そう3136は、特定の桁であること。
入力形式
正の整数K(1111 <= K <= 9999)
出力フォーマット
Kは一定の最大4桁以下です。
サンプル入力
8000
サンプル出力
7921
(1)プログラミングのアイデア。
kから数字を開始iは網羅的、iは、各桁のための10 Cを千(= I / 1000)、百件のB(B =(IA * 1000)/ 100)を分離しました(C =(IA * 1000、B * 100)/ 10)ビットが(D = I 10%)は、D。
(2)ソース。
書式#include <stdio.hに>
メインint型()
{
int型I、K、A、B、C、D。
scanf関数( "%のD"、&K);
(; I> = 1000; i-- iはK =)を用
{
I / 1000 =。
B =(IA * 1000)/ 100。
C =(IA * 1000、B * 100)/ 10。
D = Iの10%。
IF(+ C == B * D)
{
printf( "%d個\ n" は、I);
ブレーク;
}
}
0を返します。
}