C语言中的几道练习题(四)-------水仙花数等

1.在屏幕上输出一下图案:

      *

     ***

    *****

   *******

  *********

 ***********

*************

 ***********

  *********

   *******

    *****

     ***

      *

#include<stdio.h>
#include<stdlib.h>

int main(){
//打印菱形
//设对角线的一半为n,当前是7
//菱形的上半部分
//第一行:六个空格,一个星号
//第二行:五个空格,三个星号
//第三行:四个空格,五个星号
//第i行:n-i个空格,2*i-1星号
void PrintLine(int blank_count,int star_count){
    int i=0;
    for(;i<blank_count;++i){
        printf("");
    }
    for(i=0;i<star_count;++i){
        printf("*");
    }
    printf("\n");
}
void PrintLingXing(int n){
    //打印上半部分
    int i=1;  //i表示当前的行数,从1开始数
    for(i=1;i<n;++i){
        PrintLine(n-i,2*i-1);
    }
    //打印中间
    PrintLine(0,2*n-1);
    //打印下半部分
    for(i=n-1;i>0;--i){
        PrintLine(n-i,2*i-1);
    }
}
system("pause");
return 0;
}

2.求出0~999之间的所有“水仙花数”并输出。

“水仙花数”是指一个三位数,其个位数字的立方和恰好等于该数

例如:153、370及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。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

//求0-999的水仙花数
//1000
int IsShuixian(int num) {
	//判断是不是水仙花数:三位数,并且<999
	if (num < 100 || num>999) {
		return 0;
	}
	//是水仙花数
	int tmp = num;  //后边要判断是不是水仙花数,会改变num的值,所以要先将num的值赋给tmp保存下来
	//比如 701
	//取出个位
	int num1 = num % 10;  //701%10->70...1=1  /10表示的是取整  %10表示的是取余
	//取出十位
	    num = num / 10; //701/10=70
		int num2 = num % 10; //70%10->7...0=0
       //取出百位
	   num = num / 10; //70/10=7
	   int num3 = num % 10; //7%10->0...7=7
	   if ( pow(num1, 3) + pow(num2, 3) + pow(num3, 3)==tmp) {
	   return 1;
  }
	return 0;
}

int main() {
	int i = 100;
	for (i = 100; i <= 999; i++) {
		if (IsShuixian(i)) {
			printf("%d\n", i);
		}
	}
	system("pause");
	return 0;
}

3.求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,

例如:2+22+222+2222+22222。

#include<stdio.h>
#include<stdlib.h>
//求数列的和
//构造出第n项的数字(从1开始数)
//例如 22222=>2+20+200+2000+20000
//=>2*10^0+2*10^1+2*10^2+2*10^3+2*10^4
int CreateNum(int a,int n){
    if(a<=0||a>=10||n<=0){
        return 0;
    }
    int num=0; //要构造出的数字
    int i=0;  //i表示10的指数
    for(;i<n;++i){
        num+=a*pow(10,i);
    }
    return num;
}

int main(){
    int i=1;
    int a=2;
    int sum=0;
    for(;i<=5;++i){
        sum+=CreateNum(a,i);
    }
    printf("%d\n",sum);
    system("pause");
    return 0;
}

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值