題目描述ios
一個三位整數(100~999),若各位數的立方和等於該數自身,則稱其爲「水仙花數」(如:153=13+53+33),找出全部的這種數。c++
輸入格式編程
沒有輸入spa
輸出格式io
若干行,每行1個數字。stream
輸入樣例循環
無程序
輸出樣例margin
153di
* * *
...
* * *
(輸出被和諧了)
對三位數n(n爲100~999之間的整數)進行窮舉。對每一個枚舉的n,分解出其百位a(a=n/100)、十位b(b=n/10%10)和個位c( c=n%10),若知足a*a*a+b*b*b+c*c*c== n,則n是水仙花數。
#include <stdio.h>
int main()
{
int n, a, b, c; //n、a、b和c分別爲三位數自身及其百位、十位和個位
for(n=100 ;n<=999;n++)
{
a=n/100;
b=n/10%10;
c=n%10;
if(a*a*a+b*b*b+c*c*c== n)
printf("%d\n",n);
}
return 0;
}
用一個三重循環對一個3位數的百位a(a的範圍爲1~9)、十位b(b的範圍爲0~9)和個位c(c的範圍爲0~9)進行窮舉,在循環體中,計算出3位數n(n=100*a+10*b+c),而後進行判斷,若知足a*a*a+b*b*b+c*c*c== n,則n是水仙花數。
#include <iostream>
using namespace std;
int main()
{
int n, a, b, c; //n、a、b和c分別爲三位數自身及其百位、十位和個位
for(a=1 ;a<=9;a++)
for (b=0; b<=9;b++)
for(c=0;c<=9;c++)
{
n=100*a+10*b+c;
if(a*a*a+b*b*b+c*c*c== n)
printf("%d\n",n);
}
return 0;
}
本題選自洛谷題庫 (https://www.luogu.org/problem/P1151)
題目描述
對於一個五位數a1a2a3a4a5,可將其拆分爲三個子數:
sub1=a1a2a3
sub2=a2a3a4
sub3=a3a4a5
例如,五位數20207能夠拆分紅
sub1=202
sub2=020(=20)
sub3=207
如今給定一個正整數K,要求你編程求出10000到30000之間全部知足下述條件的五位數,條件是這些五位數的三個子數sub1 ,sub2 ,sub3均可被K整除。
輸入格式
一個正整數K
輸出格式
每一行爲一個知足條件的五位數,要求從小到大輸出。不得重複輸出或遺漏。若是無解,則輸出「No」。
輸入樣例
15
輸出樣例
22555
25555
28555
30000
(1)編程思路。
本題關鍵是分離出一個五位數n的三個子數sub1 ,sub2 和sub3。因爲sub1是n的高3位數,所以,sub1=n/100;sub2是n的中間3位數,所以,sub2=n/10%1000;sub3是n的低3位數,所以,sub3=n%1000。
用循環for (n=10000;n<=30000;n++)對每一個五位數n進行窮舉判斷便可。
(2)源程序。
#include <stdio.h>
int main()
{
int i,sub1,sub2,sub3,k,f=0;
scanf("%d",&k);
for (i=10000;i<=30000;i++)
{
sub1=i/100;
sub2=i/10%1000;
sub3=i%1000;
if (sub1%k==0 && sub2%k==0 && sub3%k==0)
{
printf("%d\n",i);
f=1;
}
}
if (f==0) printf("No\n");
return 0;
}
題目描述
一個4位天然數分爲先後兩個2位數,若該數等於所分兩個2位數和的平方,則稱爲4位分段和平方數。例如,2025=(20+25)2。
編寫程序求出全部4位分段和平方數。
輸入格式
沒有輸入
輸出格式
若干行,每行1個數字。
輸入樣例
無
輸出樣例
2025
* * *
...
* * *
(輸出被和諧了)
(1)編程思路1。
對全部的4位整數n進行窮舉,n的範圍爲1000~9999,共9000個數。對每一個數n,分離出高兩位數x(x=n/100)和低兩位數y(y=n%100),而後進行判斷,若知足n==(x+y)*(x+y),則n是一個4位分段和平方數。
(2)源程序1。
#include <stdio.h>
int main()
{
int n,x,y;
for(n=1000;n<=9999;n++)
{
x=n/100;
y=n%100;
if (n==(x+y)*(x+y))
printf("%d\n",n);
}
return 0;
}
(3)編程思路2。
思路1的窮舉次數爲9000次。實際上,因爲4位分段和平方數必定首先是一個平方數,所以只須要窮舉4位數中的平方數便可,即窮舉sqrt(1000)~sqrt(9999)之間的數a,在循環體中,先計算出4位數n=a*a,再分離出高兩位數x(x=n/100)和低兩位數y(y=n%100),而後進行判斷,若知足a==(x+y),則n是一個4位分段和平方數。顯然,這樣窮舉,循環次數會大爲減小。
(4)源程序2。
#include <stdio.h>
#include <math.h>
int main()
{
int a,n,x,y;
for(a=(int)sqrt(1000);a<=(int)sqrt(9999);a++)
{
n=a*a;
x=n/100;
y=n%100;
if (a==x+y)
printf("%d\n",n);
}
return 0;
}
題目描述
有這樣一些特定的四位數,它的千位數字與十位數字之和等於百位數字與個位數字之積。例如,3136, 3+3=1*6 ,故3136就是一個特定的四位數。
輸入格式
一個正整數K(1111<=K<=9999)
輸出格式
一個不大於K的最大的特定四位數。
輸入樣例
8000
輸出樣例
7921
(1)編程思路。
從k開始對四位數i進行窮舉,對每一個四位數i分離出千位a(a=i/1000)、百位b(b=(i-a*1000)/100)、十位c(c=(i-a*1000-b*100)/10)和個位d(d=i%10)。
(2)源程序。
#include<stdio.h>
int main()
{
int i,k,a,b,c,d;
scanf("%d",&k);
for (i=k; i>=1000; i--)
{
a=i/1000 ;
b=(i-a*1000)/100;
c=(i-a*1000-b*100)/10;
d=i%10;
if (a+c==b*d)
{
printf("%d\n",i);
break;
}
}
return 0;
}