学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

相关文章
|
机器学习/深度学习 运维 前端开发
集成学习方法:Bagging与Boosting的应用与优势
集成学习方法:Bagging与Boosting的应用与优势
526 0
|
监控 JavaScript 前端开发
JavaScript与HTML关系及其嵌入方式:新手常犯错误与规避策略
【4月更文挑战第1天】本文介绍了JavaScript与HTML的关系,强调了理解它们的分工和协作对于初学者的重要性。文中列举了新手在嵌入JavaScript时常见的错误,如嵌入位置不当、异步与延迟属性混淆、内联脚本与HTML混杂、忽略浏览器兼容性以及缺乏错误处理。提供了避免这些错误的策略,包括合理安排script标签、使用事件监听器、关注浏览器兼容性、学习调试技巧,并提倡遵循“结构-样式-行为”分离原则和使用错误处理机制。遵循这些最佳实践,有助于提高代码质量和开发效率。
417 1
|
Web App开发 编解码 监控
防御性设计和开发
“防御性编程(Defensive programming)是防御式设计的一种具体体现,它是为了保证,对程序的不可预见的使用,不会造成程序功能上的损坏。它可以被看作是为了减少或消除墨菲定律效力的想法。”
1230 0
防御性设计和开发
|
2月前
|
存储 缓存 数据处理
71_数据版本控制:Git与DVC在LLM开发中的最佳实践
在2025年的大模型(LLM)开发实践中,数据和模型的版本控制已成为确保项目可重复性和团队协作效率的关键环节。与传统软件开发不同,LLM项目面临着独特的数据版本控制挑战:
|
3月前
|
安全 Linux 网络安全
Metasploit Framework 6.4.88 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.88 (macOS, Linux, Windows) - 开源渗透测试框架
563 0
|
6月前
|
Ubuntu API
在Ubuntu上利用SANE API实现跨平台扫描功能的指南
跨平台扫描功能的实现,在Ubuntu上表演起来,只需要SANE这个神奇魔杖,加上一系列施法步骤,每个命令都像是进行咒语施法,只需轻松点击按键,即可驱动扫描仪进行各种跃动。别忘了,这只是开始,在扫描的舞台上,还有许多舞步等待你去开发和探索。
236 14
|
6月前
|
NoSQL MongoDB 开发者
Python与MongoDB的亲密接触:从入门到实战的代码指南
本文详细介绍了Python与MongoDB结合使用的实战技巧,涵盖环境搭建、连接管理、CRUD操作、高级查询、索引优化、事务处理及性能调优等内容。通过15个代码片段,从基础到进阶逐步解析,帮助开发者掌握这对黄金组合的核心技能。内容包括文档结构设计、批量操作优化、聚合管道应用等实用场景,适合希望高效处理非结构化数据的开发者学习参考。
321 0
|
9月前
|
SQL 人工智能 BI
《解锁AI与SQL Server的高效协作,提升并发查询能力》
在数字化转型中,企业业务激增使SQL Server面临并发查询的严峻挑战。传统优化手段难以应对复杂场景,而AI技术通过深度数据分析、智能执行计划调整和动态资源分配,精准解决性能瓶颈。案例表明,AI可大幅提升系统响应速度与吞吐量,助力企业在高并发场景下实现高效稳定运行,为未来业务增长提供坚实保障。
200 5
|
11月前
|
JSON 数据挖掘 开发者
1688 商品评论接口系列(1688API)
1688商品评论接口助力电商数据分析与优化。通过该接口,开发者可获取指定商品的评论数据(如昵称、内容、评分等),支持情感分析和质量反馈收集。接口采用HTTP GET/POST请求,返回JSON格式数据。Python示例代码展示如何调用接口并处理响应。应用场景包括商家产品优化、客户服务提升、市场调研及电商平台数据分析。
387 7
|
11月前
|
人工智能 自然语言处理 数据挖掘
《深度解析:VAEs如何重塑数据生成与重建格局》
变分自编码器(VAEs)是人工智能领域中强大的生成模型,广泛应用于图像生成、语音合成及医疗数据分析。其核心由编码器和解码器组成,通过将数据映射到低维潜在空间并重建,实现高效的数据生成与重建。VAEs的潜在空间具有连续性,并引入概率分布以支持创新生成。损失函数引导编码与解码优化,确保高质量的重建效果。VAEs在图像、医疗和自然语言处理等领域展现出巨大潜力,为各行业带来新的发展机遇。
314 18