學習不易,需要堅持
1.在屏幕上輸出一個菱形。
2.求出0~999之間的所有“水仙花數”並輸出。
/*
在數論中,水仙花數(Narcissistic number)也稱爲自戀數、自冪數、阿姆斯壯數或阿姆斯特朗數(Armstrong number),是指一N位數,其各個數之N次方和等於該數。
例如153、370、371及407就是三位數的水仙花數,其各個數之立方和等於該數:
153 = 1^3 + 5^3 + 3^3。
370 = 3^3 + 7^3 + 0^3。
371 = 3^3 + 7^3 + 1^3。
407 = 4^3 + 0^3 + 7^3。
*/
求Sn=a+aa+aaa+aaaa+aaaaa的前5項之和,其中a是一個數字,
例如:2+22+222+2222+22222
1.
//打印菱形
#include <stdio.h>
int main()
{
int n = 7 ;
int a = 0 ;
int b = 0 ;
int i = 0 ;
for(i=1; i<=n; i++)
{
for(a=n-1; a>=i; a--)
{
printf(" ") ;
}
for(b=1; b<=2*i-1; b++)
{
printf("*") ;
}
printf("\n") ;
}
for(i=n-1; i>=1; i--)
{
for(a=i; a<=n-1; a++)
{
printf(" ") ;
}
for(b=1; b<=2*i-1; b++)
{
printf("*") ;
}
printf("\n") ;
}
return 0 ;
}
運行結果:
2.
//水仙花數
//此算法較爲普通,通俗易懂,就是判斷i^3 + j^3 +k^3 與 1*100 + j*10 + k 是否相等,並在循環裏來用if語句限定輸出的只能是三位數,嵌套了三層for循環,效率不高。
#include <stdio.h>
int main()
{
int i = 0 ;
int j = 0 ;
int k = 0 ;
printf("水仙花數爲:\n") ;
for(i=0; i<=9; i++)
{
for(j=0; j<=9; j++)
{
for(k=0; k<=9; k++)
{
if(i*100 + j*10 + k > 99)
{
if(i*i*i + j*j*j +k*k*k == i*100 + j*10 + k)
{
printf("%d ",i*100 + j*10 + k) ;
}
}
}
}
}
printf("\n") ;
return 0 ;
}
//水仙花數
//此方法較方法一效率稍高,將三位數的百位十位個位都分解出來,再進行判斷。
#include <stdio.h>
#include <math.h>
int main()
{
int i = 0 ; //百位
int j = 0 ; //十位
int k = 0 ; //個位
int n = 0 ;
printf("水仙花數爲:") ;
for(n=100; n<=999; n++)
{
i = n / 100 ;
j = n / 10 % 10 ;
k = n % 10 ;
if(pow(i,3) + pow(j,3) + pow(k,3) == n)
{
printf("%d ", n) ;
}
}
printf("\n") ;
return 0 ;
}
運行結果:
3.
//求Sn=a+aa+aaa+aaaa+aaaaa的前5項之和,其中a是一個數字,例如:2+22+222+2222+22222
#include <stdio.h>
int main()
{
int a = 0 ;
int num = 0 ;
int sum = 0 ;
int i = 0 ; //控制循環次數
printf("求Sn=a+aa+aaa+aaaa+aaaaa的前5項之和,請爲a賦值: ") ;
scanf("%d", &num) ;
for(i=1; i<=5; i++)
{
a = a * 10 + num ;
sum = sum + a ;
}
printf("Sn = %d\n", sum) ;
return 0 ;
}
運行結果: