【Coding日记】菜鸟编程C语言100例——第一题

今日收获------遍历+条件判断

📚题目

有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

🧠思路分析

  • 要能计数,也就是统计,来个count,放在遍历里面
  • 同时也要打印,二者要放在一起
  • 另外,有条件约束,我们用 if 语句进行选择性打印和选择性计数

🚀精选答案

c 复制代码
#include "stdio.h"

int main ()
{
    // 定义百位、十位、个位变量
    int hundred, decade, unit;
    // 统计无重复组合的数量
    int count = 0;

    // 遍历百位(1-4)
    for (hundred = 1; hundred <= 4; hundred++) {
        // 遍历十位(1-4)
        for (decade = 1; decade <= 4; decade++) {
            // 遍历个位(1-4)
            for (unit = 1; unit <= 4; unit++) {
                // 过滤掉有重复数字的组合
                if (hundred != decade && hundred != unit && decade != unit) {
                    // 数字间加空格,输出更易读:如 1 2 3 而非 123
                    printf("%d %d %d\n", hundred, decade, unit);
                    count++;
                }
            }
        }
    }
    // 输出总数
    printf("Total combinations: %d\n", count);
    
    return 0;
}

🤕我的试错之旅

for嵌套逻辑

一开始我是用的三层for循环,结果相当惨,而且我也百思不得其解

后来在co-pilot的帮助下理解了for循环的嵌套逻辑

------⚠️假定外层循环和内层循环都是三次,

------⚠️在第一轮大循环(外层for循环)中,内部循环(第二层和第三层)要全部跑完,再能进行下面两轮大循环(剩下两个for外层)

如下👇

bash 复制代码
Outer loop i = 1    
  Middle loop j = 1 
    Inner loop k = 1
    Inner loop k = 2
  Middle loop j = 2 
    Inner loop k = 1
    Inner loop k = 2
Outer loop i = 2    
  Middle loop j = 1 
    Inner loop k = 1
    Inner loop k = 2
  Middle loop j = 2 
    Inner loop k = 1
    Inner loop k = 2
Outer loop i = 3    
  Middle loop j = 1 
    Inner loop k = 1
    Inner loop k = 2
  Middle loop j = 2
    Inner loop k = 1
    Inner loop k = 2

为什么在for里面做条件约束不行?🤔

很简单,因为for循环的条件判断,从外开始,而当我们的条件判断一旦不满足,直接进入下一轮大循环,上一轮满足条件的小循环就被忽略,所以最后会少很多结果

意料之外的错误------编译器格式规范➕变量初始化

自己写的时候,所有变量都没有初始化,结果最后TOATAL统计量count最后呈现混乱的栈溢出?但是上面的三位数变量分别都想安无事

😅另外就是这个奇葩的报错,因为我认为for,if后面就一个语句所以没有加花括号{}------这是我在嵌入式编程KEIL里面的习惯

bash 复制代码
...
431
432
Total=-288981856
PS H:\Z_Desktop\TEST_CODE\C_TEST\vs code> cd "h:\Z_Desktop\TEST_CODE\C_TEST\vs code\" ; if ($?) { gcc tempCodeRunnerFile.c -o tempCodeRunnerFile } ; if ($?) { .\tempCodeRunnerFile }
tempCodeRunnerFile.c:1:1: error: expected '=', ',', ';', 'asm' or '__attribute_
' at end of input
    1 | ation
      | ^~~~~

解决方案🔍

  • 对count变量进行初始化,count =0;
  • 而🤔那三个变量却没事,是因为在for循环里完成了初始化 for(unit=1;unit<5;unit++)
  • 还有就是无论怎样,都要加上花括号啊,保持格式严谨(不同编译器,严苛程度不同)

💬总结碎碎念

今天算是第一天,发现自己啥也不会,也算是敲响一个警钟吧😮‍💨

另外,🤔做这种纯软的题目,真的有用吗?因为本人并非CS专业

今天只是入门,以后可能会涉及到算法之类的东西吧

相关推荐
小小de风呀2 小时前
de风——【从零开始学习Linux】(九):进程基础 —— 从冯诺依曼体系到 fork 创建进程
linux·学习
李某学编程2 小时前
基于ARM的微机原理学习笔记(一)
arm开发·笔记·学习
Song_RsHt3 小时前
Redis 与微服务,什么场景下无可替代
java·redis·后端·学习·微服务
lhbweilai3 小时前
分析FreeRTOS内核对象API的源码实现(八)
c语言·开发语言·stm32·单片机
艾络迅Acceleronix4 小时前
环境监测终端:STM32+EG800Z AT+ 艾络迅平台实战|多传感器采集联动全流程
c语言·stm32·单片机·嵌入式硬件·物联网·1024程序员节
Zwawa4 小时前
一只按键不只“按下”:短按、长按和连按如何共存
c语言·单片机·嵌入式
~kiss~6 小时前
PRO-LONG: Programmatic Memory Enables Long-Horizon Reasoning 程序式记忆赋能长程推理
学习
程序猿编码6 小时前
不依赖 vLLM/llama.cpp:一套面向学习的 DeepSeek-R1 CUDA 推理实现
c++·学习·语言模型·llama·vllm·大模型推理
ms72wx6 小时前
Docker 命令学习笔记:从入门到进阶的实战指南
笔记·学习·docker
wyhwust7 小时前
程序设计基础--C语言输入输出单元测试
c语言·开发语言