【C语言】从水仙花构建思维

news2024/10/7 16:18:55

前言
🎈大家好,我是何小侠🎈
🍃大家可以叫我 小何或者小侠 🍃
💐希望能通过写博客加深自己对于学习内容的理解💐
🌸也能帮助更多人理解和学习🌸

击石乃有火,不击元无烟。
人学始知道,不学非自然。
万事须己运,他得非我贤。
青春须早为,岂能长少年。 — 唐代·孟郊《劝学》

在这里插入图片描述


    这篇博客我们一起来学习一下有关于C语言中常见题目水仙花的思维,这对我们刷题时有一个清晰的思路很有帮助。
    在这里插入图片描述

    目录

    • 最简单的水仙花🍊
    • 水仙花进阶🍊
    • 变种水仙花🍊
    • 总结🍊

    最简单的水仙花🍊

    在这里插入图片描述
    我们需要打印出所有的水仙花数,并且一个数占一行,我们会怎么打印呢?
    如果我们是初学者可能会这样

    int main() {
        int i = 0;
        for (i = 100; i <= 999; i++)
        {
            int a = i % 10;
            int b = i / 10 % 10;
            int c = i / 100 % 10;
            if (a * a * a+ b * b * b + c * c * c == i)
            {
                printf("%d\n", i);
            }
        }
    
        return 0;
    }
    

    但是这样能让我们学习到的方法很少。

    我们换一种方法借用pow函数

    #include<stdio.h>
    #include<math.h>
    int main() {
        int i = 0;
        for (i = 100; i <= 999; i++)
        {
            if ( pow(i%10, 3) + pow(i / 10 % 10, 3) + pow(i / 100 % 10, 3) == i)
            {
                printf("%d\n", i);
            }
           
        }
      
        return 0;
    }
    

    在这里插入图片描述
    有人就要说了,pow的参数和返回值都是double,我们可以直接使用吗?
    pow函数的参数可以是double类型,但是也可以是int类型。当参数为int类型时,会自动将int类型转换为double类型,然后进行计算。这就是表达式中的隐式转换。这里我们判断一下if的表达式都转换为double来最后进行判断

    水仙花进阶🍊

    在这里插入图片描述
    我们来看看这个题就明显可以用我们上面的pow函数,当然思路也不算太难,主要是要学会运用。

    #include <stdio.h>
    #include<math.h>
    int main() {
       int m = 0;
       int n = 0;
       int flag = 0;
       while(~scanf("%d %d",&m,&n))
       {
       int i = 0;
       for (i = m; i <= n; i++)
       {
         if ( pow(i % 10,3) + pow(i / 10 % 10,3) + pow(i / 100 ,3) == i)
            {
                printf("%d ", i);
            flag++;
            }
       }
         if (flag == 0)
         {
          printf("no\n");
         }
         flag = 0;
       
       }
        return 0;
    }
    

    这个代码的小细节有scanf多组输入时候的一种写法,
    因为scanf返回的是你输入值的个数,简单点来说,就是你有几个&就返回几。我们知道~是按位取反,我们正常其实是这样写 while(scanf("%d %d",&m,&n)!=EOF),我们知道EOF是-1,而-1的补码全是1,那么取法后就等于0,等于0的时候刚好也就退出循环。

    还有一个比较要注意的是我们判断输出no之后也需要把flag 变成0,以便于多组输入的正确性

    变种水仙花🍊

    在这里插入图片描述

    最后是这个题目我们怎么来看呢?

    说一说思路:
    我们肯定是在 0-100000这个范围里面循环,我们再想一想之前我们判断三位数的时候是怎么做的,用pow(base,exponent),base是底数,exponent是幂,我们的base很好变化,那么我们的幂怎么决定呢?
    我们看题目,“水仙花数”是一个n位数,其各位数字的n次方等于该数本身。
    那么我们就需要判断这个数是几位数。

    下面给出代码

    #include<stdio.h>
    #include<math.h>
    int main()
    {
    	int n = 0;
    	for (n = 1; n <= 100000; n++)
    	{
    		int tmp = n;
    		int count = 0;//位数
    		//判断出是几位位数
    		while (tmp)//123    12   1  
    		{ 
    			tmp /= 10;  //12    1     0
    			count++;  
    		}
    		tmp = n;//n不能被改变因为下面还要比较
    		//计算n次方之和
    		int sum = 0;//各数位相加
    		while ( tmp )
    		{
    		
    			sum += (int)(pow(tmp % 10, count));
    			tmp /= 10;//每次减少一位数
    		}
    		if (sum == n)
    		{
    			printf("%d  ", sum);
    		}
    	}
    
    
    	return 0;
    }
    
    
    

    在这里插入图片描述

    这个代码主要是要记住n不能被改变,因为最后的 if ( )还需要比较,还有求位数后tmp的值就变成0了,为了下次还能够使用,我们必须再tmp =n ;
    ,最后像count,sum,这两个变量的创建位置一定要能在第二次也能够使用,所以不能创建在for循环之外。

    总结🍊

    这篇博客写的东西并不是太难,主要是想总结一下水仙花这一类型 题目,
    最重要的我觉得还是变种水仙花。这篇博客这里就结束了。

    最后如果这篇博客有帮助到你,欢迎点赞关注加收藏

    在这里插入图片描述在这里插入图片描述
    如果本文有任何错误或者有疑点欢迎在评论区评论
    在这里插入图片描述

    在这里插入图片描述

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/716155.html

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

    相关文章

    【反图+拓扑排序】ABC245 F

    F - Endless Walk (atcoder.jp) 题意&#xff1a; 思路&#xff1a; 首先&#xff0c;我们什么时候需要建反图&#xff1a;在一个有向图中&#xff0c;我们需要找出可以到达指定的结点的结点时&#xff0c;我们可以建立反图 这道题中&#xff0c;我们需要找出所有能够到达环…

    剑指offer刷题笔记--Num31-40

    1--栈的压入、弹出序列&#xff08;31&#xff09; 直观思路&#xff1a;用两个指针 i 和 j 指向压入和弹出的 vector&#xff0c;终止条件是&#xff1a;所有元素都压入了辅助栈&#xff08;i > len&#xff09;&#xff0c;且辅助栈当前的栈顶元素与弹出的元素 popped[j] …

    Maven Snapshot 更新策略配置方法

    项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 在微服务的项目开发中&#xff0c;特别是更新比较频繁的项目&#xff0c;经常会遇到一些项目依赖的问题&#xff0c;依赖的一个项目经常更新&#xff0c;所以我下拉更新项目时候经常出现代码不一致&a…

    Ansys Zemax | 使用软件建立立方体卫星系统(一)

    在航空航天工业领域中&#xff0c;立方体卫星&#xff08;CubeSats&#xff09;已然是一种低成本、易制造的航天光学系统的解决方案。通过制造一组更小、更实惠的系统&#xff0c;使得为航天产品开发生产线方法成为可能。 立方体卫星光学系统的制造商们需要一个准确并可靠的方法…

    基于微信小程序学校部门年终绩效考核自动评分系统(源码+文档+数据库+PPT)

    基于微信小程序的部门年终绩效考核系统&#xff0c;为加强学校运营队伍建设提高学校管理力&#xff0c;合理评价教师及部门年度工作计划完成情况&#xff0c;促进整体绩效改进&#xff0c;鼓励管理团队注重对下属进行帮助、提升&#xff0c;促进团队扩张和发展&#xff0c;特制…

    【花雕】全国青少年机器人技术一级考试备考实操搭建手册10

    随着科技的不断进步&#xff0c;机器人技术已经成为了一个重要的领域。在这个领域中&#xff0c;机械结构是机器人设计中至关重要的一部分&#xff0c;它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说&#xff0c;了解机械结构的基础知识&#xff0c;掌…

    idea篇2:常用插件

    1、汉化插件 下载完成后点击Restart IDE 如果你这边插件搜不出来&#xff0c;还可以去官网插件地址下载 打开 https://plugins.jetbrains.com/ 然后点击Instatll To IDE 弹出Success的时候我们切换回IDEA,然后点击ok 如果你这种方式还是无法成功 那么还可以点击插件商城的Ve…

    半年面试数百场,我总结出了这份 10w 字 Java 面试复盘笔记

    Java 面试 Java 作为编程语言中的 NO.1,选择入行做 IT 做编程开发的人&#xff0c;基本都把它作为首选语言,进大厂拿高薪也是大多数小伙伴们的梦想。以前 Java 岗位人才的空缺&#xff0c;而需求量又大&#xff0c;所以这种人才供不应求的现状&#xff0c;就是 Java 工程师的薪…

    【javascript】导航栏

    要实现这样的效果主要有两点。第一&#xff0c;当鼠标经过主导航栏里面的内容就会被放大&#xff0c;鼠标离开后就会恢复原来的样子&#xff1b;第二&#xff0c;当鼠标经过主导航时对应的副导航的内容就会呈现。 <!DOCTYPE html> <html lang"en"> <…

    Flink写入数据到ClickHouse

    文章目录 1.ClickHouse建表1.ClickHouse依赖2.Bean实体类3.ClickHouse业务写入逻辑4.测试写入类5.发送数据 1.ClickHouse建表 ClickHouse中建表 CREATE TABLE default.test_write (id UInt16,name String,age UInt16 ) ENGINE TinyLog();1.ClickHouse依赖 Flink开发相关…

    爬虫入门指南(7):使用Selenium和BeautifulSoup爬取豆瓣电影Top250实例讲解【爬虫小白必看】

    文章目录 介绍技术要点SeleniumBeautifulSoupOpenpyxl 实现步骤&#xff1a;导入所需库设置网页URL和驱动路径创建 ChromeDriver 服务配置 ChromeDriver创建 Excel 文件爬取数据关闭浏览器保存 Excel 文件 完整代码导出的excel 效果图未完待续.... 介绍 在本篇博客中&#xff…

    Day976.如何安全、快速地接入OAuth 2.0? -OAuth 2.0

    如何安全、快速地接入OAuth 2.0&#xff1f; Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于如何安全、快速地接入OAuth 2.0&#xff1f;的内容。 授权服务将 OAuth 2.0 的复杂性都揽在了自己身上&#xff0c;这也是授权服务为什么是 OAuth 2.0 体系的核心的原因之…

    企业为什么纷纷推崇数字化管理?

    企业提倡或推崇数字化管理&#xff0c;通常是因为几个原因&#xff1a; 效率和生产力&#xff1a;数字管理系统简化流程并自动执行重复任务&#xff0c;从而提高效率和生产力。数字工具可以更快地输入、检索和分析数据&#xff0c;减少人工工作和人为错误。这种效率使企业能够在…

    STM32速成笔记—Flash闪存

    文章目录 一、Flash简介二、STM32F1的Flash三、Flash操作步骤四、程序设计4.1 读取数据4.2 写入数据&#xff08;不检查&#xff09;4.3 写入数据&#xff08;检查&#xff09; 五、注意事项 一、Flash简介 快闪存储器&#xff08;flash memory&#xff09;&#xff0c;是一种…

    物理与IP环境的重要性:打造稳定可靠的亚马逊测评环境

    在亚马逊平台上进行测评补单、撸卡和撸货等活动&#xff0c;首要问题是确保环境的安全性和稳定性。一个稳定的环境是进行测评和撸卡的基础&#xff0c;如果无法解决安全性问题&#xff0c;那么从事这些项目就不值得。在环境技术研发领域已经有六七年的经验&#xff0c;在早期测…

    红利期已过?2023跨境电商还吃香吗?亚马逊还能做吗?

    2022年&#xff0c;由于疫情反复和外部因素的影响&#xff0c;跨境电商的情况并不乐观。但这并不意味着跨境电商已经走到了绝境。随着贸易全球化的深入发展&#xff0c;平台规则不断完善&#xff0c;国家相继出台最新的扶持政策&#xff0c;为跨境电商企业带来了更多的发展机遇…

    Spring Boot 中的 Zookeeper 分布式锁

    Spring Boot 中的 Zookeeper 分布式锁 分布式锁是分布式系统中常用的一个同步工具&#xff0c;它可以在多个进程之间协调访问共享资源&#xff0c;避免数据不一致或重复处理。在分布式环境中&#xff0c;由于网络通信的延迟和节点故障等原因&#xff0c;传统的锁机制无法满足需…

    MES与ERP系统的生产计划管理到底有什么不同?

    MES 的生产计划管理与 ERP 的生产计划管理到底有什么不同&#xff1f; 生产计划管理是企业发展的重要一环&#xff0c;对于提升企业生产效率&#xff0c;提高客户满意度&#xff0c;降低成本&#xff0c;提高客户满意度等方面都有重要意义。 我们首先来看MES和ERP生产计划管理…

    Cisco Catalyst 9000 Series Switches, IOS-XE Release Dublin-17.11.1 ED

    Cisco Catalyst 9000 Series Switches, IOS-XE Release Dublin-17.11.1 ED Cisco Catalyst 9000 交换产品系列 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-catalyst-9000/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;…

    Vox-E: Text-guided Voxel Editing of 3D Objects(3D目标的文本引导体素编辑)

    Vox-E: Text-guided Voxel Editing of 3D Objects &#xff08;3D目标的文本引导体素编辑&#xff09; Paper&#xff1a;https://readpaper.com/paper/1705264952657440000 Code&#xff1a;http://vox-e.github.io/ 原文链接&#xff1a;Vox-E: 3D目标的文本引导体素编辑 &…