学C的第二十四天【练习:1. 打印菱形;2. 打印自幂数;3. 求Sn=a+aa..n项之和;4. 喝汽水问题;5. 调整数组使奇数位于偶数前面;6. 打印X形图案;7……;8……;9……;10……】-1

简介: 练习:(重点在图片注释) 1. 打印菱形

练习:(重点在图片注释)

                     

1. 打印菱形

题目:

用C语言在屏幕上输出以下图案:

765b3af719d74aca83f29df7118424e0.png

实现代码:

//打印菱形
//上半部分:空格在减少,*号在增多
#include <stdio.h>
int main()
{
  int line = 0;//上半行数
  scanf("%d", &line);//输入上半行数
  //菱形上半部分的打印:行数 -- line
  int i = 0;
  for (i = 0; i < line; i++)
  {
    //打印一行,先打印空格,再打印*号
    //打印空格:
    int j = 0;
    //上半部分空格规律:
    //      line-1-i:假设行数是7,
    //第一行打印7-1-0=6个空格;第二行打印7-1-1=5个空格……
    for (j = 0; j < line-1-i; j++)  
    {
      printf(" ");
    }
    //打印*号:
    //上半部分*号规律:
    //      2*i+1:假设行数是7,
    //第一行打印2*0+1个*号;第二行打印2*1+1个*号……
    for (j = 0; j < 2*i+1; j++)
    {
      printf("*");
    }
    //打印完后进行换行:
    printf("\n");
  }
  //菱形下半部分的打印:行数 -- line-1
  for (i = 0; i < line-1; i++)
  {
    //打印一行,先打印空格,再打印*号
    //打印空格:
    int j = 0;
    //下半部分空格规律:
    //      j<=i:假设行数是7-1=6,
    //第一行打印j=0,i=0,j<=i,1个空格;第二行打印j=0,i=1,j<=i,2个空格……
    for (j = 0; j <= i; j++)
    {
      printf(" ");
    }
    //打印*号:
    //下半部分*号规律:
    //    2*(line-1-i)-1:假设行数是7-1=6,
    //第一行打印2*(7-1-0)-1,11个*号;第二行打印2*(7-1-1)-1,9个*号……
    for (j = 0; j < 2*(line-1-i)-1; j++)
    {
      printf("*");
    }
    //打印完后进行换行:
    printf("\n");
  }
  return 0;
}

测试图片:

         

菱形上半部分:

image.png

菱形下半部分:

image.png

2. 打印0-100000中的自幂数(水仙花数是其中一种)

题目:

求出0~100000之间的所有自幂数输出

自幂数是指一个n位数,其各位数字的n次方之和恰好等于该数本身

如:153=1^3+5^3+3^3,则153是一个自幂数

实现代码:

//打印自幂数(0-100000):
//假设 m 是一个 n位数 ,m 的 每一位的n次方之和 等于 m。
//如-- 153 = 1 ^ 3 + 5 ^ 3 + 3 ^ 3
#include <stdio.h>
#include <math.h>
int main()
{
  int i = 0;
  for (i = 0; i <= 100000; i++)
  //使用for循环产生0-100000的数
  {
    //判断i是否是自幂数:
    //1. 知道是几位数:计算i的位数 -- n
    //一个数 至少也是 一位数,所以起始 n=1
    int n = 1;
    int tmp = i;//代替i,防止后续操作改变循环变量
    //思路:i/10 --> 可以去掉一位 --> n+1 ,直到i/10==0
    while (tmp /= 10) //直到/10==0,停止循环
    {
      n++;//统计位数
    }
    //2. 求每一位的n次方之和
    //思路:%10 --> 取出每一位
    tmp = i;//再次替换i
    int sum = 0;//存放每位次方后的和
    while (tmp)//只要i不等于0,就继续取出每一位
    {
      sum += pow(tmp % 10, n);
      //模10 取出一位后,求出这位数的n次方,再求和
      tmp /= 10;//移至下一位
    }
    //3. 判断是不是自幂数
    if (sum == i)
    {
      printf("%d ", i);//是则进行打印
    }
  }
  return 0;
}

测试图片:

image.png

3. 求Sn=a+aa+aaa+aaaa+aaaaa+……的前n项之和

题目:

Sn=a+aa+aaa+aaaa+aaaaa+……的前n项之和,其中a一个数字

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

实现代码:

//计算求和
//求Sn = a + aa + aaa + aaaa + aaaaa的前n项之和,其中a是一个数字,
//例如:2 + 22 + 222 + 2222 + 22222
#include <stdio.h>
int main()
{
  int a = 0;
  int n = 0;//a的前n项
  scanf("%d %d", &a, &n); 
  //规律:a + a*10+a + ……
  //利用规律算出每一项后相加
  int i = 0;
  int sum = 0;//算出每一项后相加
  int k = 0;//用于算出每一项
  for (i = 0; i < n; i++)//前n项,算n次
  {
    k = k * 10 + a;//利用规律算出每一项
    sum += k;//每一项相加
  }
  //输出结果:
  printf("%d\n", sum);
  return 0;
}

测试图片:


image.png

4. 喝汽水问题

题目:

喝汽水,1瓶汽水1元2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水(编程实现)

           

第一种方法 -- 实现代码:

//喝汽水问题
//喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水(编程实现)。
#include <stdio.h>
int main()
{
  int money = 0; //空瓶数
  int total = 0; //喝的全部瓶数
  int empty = 0; //空瓶数
  //输入钱数:
  scanf("%d", &money);
  total += money;//一开始,有多少钱就有多少瓶
  empty += money;//钱换了多少瓶就有多少空瓶
  //进行空瓶兑换:
  while (empty >= 2)//空瓶大于等于2瓶就进行兑换
  {
    total += empty / 2;//把兑换后的瓶数加到总瓶数中
    empty = empty / 2 + empty % 2;
    //empty / 2:换了多少瓶就又有多少个空瓶,
    //empty % 2:再加上可能没到2瓶不够换的1瓶
    //这两部分加起来才是总空瓶数
    //之后再判断需不需要再循环
  }
  printf("%d", total);
  return 0;
}

第一种方法 -- 测试图片:

image.png

第二种方法 -- 实现代码:

//喝汽水问题
//喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水(编程实现)。
#include <stdio.h>
int main()
{
  int money = 0; //空瓶数
  int total = 0; //喝的全部瓶数
  int empty = 0; //空瓶数
  //输入钱数:
  scanf("%d", &money);
  total += money;//一开始,有多少钱就有多少瓶
  empty += money;//钱换了多少瓶就有多少空瓶
  //利用方法一中发现的规律:
  if (money > 0)
    //防止0元计算出负一瓶的情况
  {
    total = 2 * money - 1;
    //使用规律进行计算
  }
  printf("%d", total);
  return 0;
}

第二种方法 -- 测试图片:

8ec520a1cace4e3180ba53aa5d17a6e6.png

相关文章
|
10月前
|
云安全 监控 安全
带你读《阿里云安全白皮书》(二十三)——云上安全建设最佳实践
淘宝作为全球最大规模、峰值性能要求最高的电商交易平台,基于阿里云成功通过了多年“双11”峰值考验。淘宝的安全体系涵盖了系统安全、网络安全、账号与凭据安全、云资源安全等多个方面,通过阿里云提供的多种安全产品和服务,确保了业务的稳定运行和数据的安全。淘宝的安全实践不仅为自身业务提供了坚实的保障,也为其他行业的云上安全建设提供了宝贵的经验和参考。
|
Rust 算法 数据安全/隐私保护
【密码学】一文读懂SM3
SM3是中华人民共和国政府采用的一种密码散列函数标准,前身为SCH4杂凑算法,由国家密码管理局于2010年12月17日发布,相关标准为&quot;GM/T 0004-2012 《SM3密码杂凑算法》&quot;。
4213 0
【密码学】一文读懂SM3
|
安全 网络协议
阿里云25端口解封教程完美解决25端口封禁的方法
阿里云出于安全考虑,默认封禁了TCP 25端口出方向的访问流量,所以用户无法使用25号端口邮件服务,云吞铺子分享25端口解封的方法: 阿里云25端口解封申请教程 用户想要使用25端口进行对外连接,可以在安全管控平台中提交25端口解封申请,可以参考官方文档(TCP 25端口解封申请- 阿里云),也可以参考下方云吞铺子的教程: 登录到阿里云管理控制台; 鼠标移动到头像,可以看到下拉菜单,点击“安全管控”如下图: 左侧栏“业务申请”--“25端口解封” 注意:在正式申请前,您需要确认同意并承诺,保证TCP 25端口仅用来连接第三方的SMTP服务器,从第三方的SMTP服务器外发邮件。
27219 1
|
设计模式 算法
交易链路设计原则&模式问题之中介者(Mediator)方法设计模式是什么,如何解决
交易链路设计原则&模式问题之中介者(Mediator)方法设计模式是什么,如何解决
|
Java 应用服务中间件 数据库连接
软件版本变化流程(alpha/RC/Release)
软件版本变化流程(alpha/RC/Release)
444 2
|
开发工具 计算机视觉 git
opencv安装指南
opencv安装指南 用包管理器安装 比如ubuntu下是apt-get,mac下是brew。(windows下或许用nuget?)以ubuntu下为例。 查看opencv相关的包 aptitude search opencv 执行安装 发现有很多包。
2793 0
|
关系型数据库 MySQL 索引
mysql 忽略主键冲突、避免重复插入的几种方式
<div class="BlogAnchor" style="padding:10px; margin:0px; line-height:23px; font-family:微软雅黑,Verdana,sans-serif,宋体; background-color:rgb(244,247,249)"> <p style="line-height:30.6px; padding-top:0p
6045 0

热门文章

最新文章