学习不易,需要坚持
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 ;
}
运行结果: