c语言打卡

这篇博客介绍了三个C语言编程题目:一是输出特定图案,利用对称性优化了代码;二是寻找0~999之间的所有水仙花数,通过计算每个数字的立方和来验证;三是计算一个数字a构成的多位数之和,通过for循环逐次增加位数。博主分享了解题思路和实现方法。
摘要由CSDN通过智能技术生成

题目一 在屏幕上输出以下图案:

       * 
      *** 
     ***** 
    ******* 
   ********* 
  *********** 
 ************* 
  *********** 
   ********* 
    ******* 
     ***** 
      *** 
       * 
  • 分析
    通过观察这个图形的 * 的最大个数为13
    一共13行,第7行为对称轴
    由对称轴分割,可以看出 * 个数规律不同
    上片,是等差数列 2i + 1
    下片,是等差数列 2
    n-(1+2*i)
  • 思路
    需要for循环嵌套,最外层循环,控制行。
    循环内部 分为 上片和下片两种不同循环结构。
  • 实现
void printPhoto() {
	for (int i = 0; i < 13; i++)//控制行
	{
	//上片
		if (i <= 6) {
			for (int j = 0; j <13 -i ; j++)
			{
				printf(" ");
			}
			for (int k = 0; k < 2*i + 1 ; k++)
			{
				printf("*");
			}
		}
		if (i > 6) //下片
		{
			for (int m = 0; m < i + 1; m++)
			{
				printf(" ");
			}
			for (int n = 0; n < 2 * (12 - i) + 1; n++)
			{
				printf("*");
			}
		}
		
		printf("\n");

	}
}
  • 更优解
    我们可以看出,菱形是对称的,其下片每行 * 的个数与上片对称行的 * 个数相同
    所以其打印规律与上片打印规律应相同。
    但是我们最外层循环控制行数,行数是递增的,与 * 数规律并不相符,所以应该增加一个变量,存贮对应行的参数。
	CorrespondingLine = line < 7 ? line : 13 - line + 1 //通过这个我们可以获得对应行

题目二 求出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
  • 思路
    分解三位数,对各个数三次方的和与该数对比
  • 实现
void narcissisticNumber() {
	for (int i = 100; i < 1000; i++)
	{
		int tem1 = i / 100;
		int remainder = i % 100;
		int tem2 = remainder / 10;
		int tem3 = (remainder % 10);
		if (pow(tem1, 3)+pow(tem2, 3)+pow(tem3, 3) == i)
		{
			printf("水仙花数:%d\n", i);
		}
	}
}

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

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

  • 分析
    数的位数每次加一,逐渐递增
  • 思路
    通过for循环,实现递增
    每一次循环,数的位数都会加1。所以设置位数变量,作为基准。
  • 实现
void sumMore() {
	int item = 0; //基数
	printf("请输入:");
	int bit = 0; //位数
	scanf("%d", &item);
	int sum = 0;
	for (int i = 1; i < 6; i++)
	{
		bit = bit * 10 + item;
		sum += bit;
		printf("bit:%d\n", bit);
	}
	printf("结果 = %d\n", sum);
}

写在最后

最近推出了公众号 coding趣谈,一位在读学生的技术提升之路,为您提供一系列我在学习路上的笔记,经验,以及感悟。往与君共勉,共同进步! 欢迎大家来关注哦!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值