用连续自然数之和来表达整数

news2025/1/24 10:52:53

文章目录

  • 题目描述:用连续自然数之和来表达整数
  • 输入描述
  • 输出描述
  • 用例1
  • 说明
  • 用例2
  • 代码
  • 运行举例
  • 注意:
    • 1、sprintf 和 strcat区别
    • 2、qsort

题目描述:用连续自然数之和来表达整数

一个整数可以由连续的自然数之和来表示。
给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式

输入描述

一个目标整数T (1 <=T<= 1000)

输出描述

该整数的所有表达式和表达式的个数。如果有多种表达式,输出要求为:
自然数个数最少的表达式优先输出
每个表达式中按自然数递增的顺序输出,具体的格式参见样例。
在每个测试数据结束时,输出一行”Result:X”,其中X是最终的表达式个数。

用例1

输入

9

输出

9=9
9=4+5
9=2+3+4
Result:3

说明

整数 9 有三种表示方法,第1个表达式只有1个自然数,最先输出,
第2个表达式有2个自然数,第2次序输出,
第3个表达式有3个自然数,最后输出。
每个表达式中的自然数都是按递增次序输出的。
数字与符号之间无空格

用例2

输入

10

输出

10=10
10=1+2+3+4
Result:2

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
    char ch[1000];
    int length;
} set;

int compare(const void *a, const void *b) {
    return ((set *)a)->length - ((set *)b)->length;
}

int main() {
    int target;
    scanf("%d", &target);
    printf("%d=%d\n", target, target); // 输出目标整数本身的表达式
    set res[1000];                     // 存储所有表达式的数组
    int cnt = 0;                       // 表达式的数量
    // 枚举从 1 开始的连续自然数的个数
    for (int i = 1; i < target; i++) {
        int sum = 0;
        char temp[1000] = ""; // 临时存储每个表达式的字符串
                              // 从第 i 个自然数开始累加
        for (int j = i; sum < target; j++) {
            sum += j;
            char num[10];
            sprintf(num, "%d+", j); // 将数字转换为字符串,并添加"+"符号
            strcat(temp, num);
            // 找到一个表达式
            if (sum == target) {
                temp[strlen(temp) - 1] = '\0'; // 去掉最后的"+"符号
                sprintf(res[cnt].ch, "%d=%s", target, temp);
                res[cnt].length = j - i + 1;
                cnt++;
                break;
            }
        }
    }
  
    qsort(res, cnt, sizeof(set), compare);

    for (int i = 0; i < cnt; i++) {
        printf("%s\n", res[i].ch);
    }

    // 输出表达式的个数
    printf("Result:%d\n", cnt + 1);
    return 0;
}

运行举例

在这里插入图片描述

注意:

1、sprintf 和 strcat区别

sprintfstrcat 都是 C 语言中处理字符串的函数,但它们在功能和用法上有着明显的区别:

  1. sprintf()

    • 函数原型:int sprintf(char *str, const char *format, ...);
    • 功能:将格式化的数据写入到一个字符数组(即字符串)中。类似于 printf() 函数,但不是输出到标准输出设备,而是存储到指定的缓冲区。
    • 使用场景:可以用于生成或格式化字符串,其中字符串可以包含各种类型的变量值,如整数、浮点数、字符串等,并且可以在一次调用中连接多个字符串或其他类型的数据。

    示例:

    char buffer[100];
    int number = 42;
    char name[] = "Alice";
    
    sprintf(buffer, "Number: %d, Name: %s", number, name);
    

    这行代码会将格式化的字符串存入 buffer 中,内容为 "Number: 42, Name: Alice"

  2. strcat()

    • 函数原型:char *strcat(char *dest, const char *src);
    • 功能:将源字符串 src 的内容追加到目标字符串 dest 的末尾,不进行任何形式的格式化。
    • 使用场景:主要用于拼接两个已知的字符串,只能处理字符串类型的数据,并且要求目标字符串有足够的空间来容纳源字符串以及原来的字符串内容和结束符 \0

    示例:

    char str1[50] = "Hello, ";
    char str2[] = "World!";
    
    strcat(str1, str2);
    

    这行代码会将 "World!" 追加到 "Hello, " 后面,形成新的字符串 "Hello, World!"

总结:

  • sprintf 主要用于格式化并生成字符串,支持多种数据类型的转换和插入;
  • strcat 则专注于简单的字符串拼接,只针对字符串进行操作,且不涉及任何格式化转换。

2、qsort

qsort() 是 C 语言标准库中提供的一个通用排序函数,用于对任何类型的数组进行快速排序。其原型定义在 <stdlib.h> 头文件中:

void qsort(void *base, size_t nmemb, size_t size,
           int (*compar)(const void *, const void *));
  • base:指向待排序数组的首元素的指针。
  • nmemb:数组中需要排序的元素个数。
  • size:每个元素的大小(以字节为单位)。
  • compar:指向比较函数的指针,该函数接收两个参数,都是指向数组元素的指针,并返回一个整数值。如果第一个参数应该排在第二个之前,则返回负数;如果两个参数相等则返回零;如果第一个参数应该排在第二个之后,则返回正数。

示例:
假设有一个整数数组需要排序:

#include <stdio.h>
#include <stdlib.h>

int compare_ints(const void *a, const void *b) {
    const int *ia = (const int *)a;
    const int *ib = (const int *)b;
    return (*ia > *ib) - (*ia < *ib); // 或者简单地写成 return (*ia - *ib);
}

int main() {
    int arr[] = {5, 2, 9, 1, 5, 6};
    size_t n = sizeof(arr) / sizeof(arr[0]);

    qsort(arr, n, sizeof(int), compare_ints);

    for (size_t i = 0; i < n; ++i) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    //输出 1 2 5 5 6 9 
    return 0;
}

在这个例子中,compare_ints 函数是一个自定义的比较函数,它负责比较两个整数并根据结果返回相应的值。qsort() 则会使用这个比较函数来决定如何对数组进行排序。

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

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

相关文章

鸿蒙语言ArkTS(更好的生产力与性能)

ArkTS是鸿蒙生态的应用开发语言 ArkTS提供了声明式UI范式、状态管理支持等相应的能力&#xff0c;让开发者可以以更简洁、更自然的方式开发应用。 同时&#xff0c;它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;进一步通过规范强化静态检…

自动驾驶中的 DCU、MCU、MPU、SOC 和汽车电子架构

自动驾驶中的 DCU、MCU、MPU 1. 分布式电子电气架构2. 域集中电子电气架构架构2.1 通用硬件定义 3. 车辆集中电子电气架构4. ADAS/AD系统方案演变进程梳理4.1 L0-L2级别的ADAS方案4.2 L2以上级别的ADAS方案 5. MCU和MPU区别5.1 MCU和MPU的区别5.2 CPU与SoC的区别5.3 举个例子 R…

陶建国教授谈中西方文化的差异与交融

龙年到来&#xff0c;这个春节里&#xff0c;“龙”字的英文翻译引发关注&#xff0c;冲上了热搜&#xff0c;网友发现&#xff0c;“龙”不再翻译为“dragon”&#xff0c;而是龙字的谐音“loong”。原来&#xff0c;在西方人的眼里&#xff0c;龙是凶猛的怪兽&#xff0c;具有…

Spring 事务原理总结六

不知不觉&#xff0c;关于Spring事务的文章已经写了五篇了。老实讲我自己不断质疑过自己&#xff1a;现在写这些文章还有意义吗&#xff1f;当前的市场已经成什么样了&#xff0c;为什么还要固守这落后的技术&#xff1f;但是贝索斯一次接受访谈的回答&#xff0c;让我写下去的…

抖店退货率太高,2024年没办法继续做了?买家市场下只能这样做

我是王路飞。 之前接到一位粉丝朋友的私信&#xff0c;说是自己做抖店也有段时间了&#xff0c;但现在没之前好做了。 一方面是行业内卷&#xff0c;自己做的无货源模式&#xff0c;没什么优势&#xff0c;利润太低了&#xff1b; 另一方面就是现在抖店的退货问题太严重了&a…

.netcore免费开源大型多用户商城系统源码

随着电商的不断扩大与市场占有率&#xff0c;现在基本每个企业或商家都会搭建自己的线上商城&#xff0c;而其中的多用户商城系统&#xff0c;由于可以让不同行业的商家入驻&#xff0c;同时也可以开设多个店铺受到了众多企业或商家的青睐。最几年&#xff0c;随着.net core C#…

Typora+PicGO+腾讯云COS做图床

文章目录 Typora&#xff0b;PicGO&#xff0b;腾讯云COS做图床一、为什么使用图床二、Typora、PicGO和腾讯云COS介绍三、下载Typora和PicGOTyporaPicGO 四、配置Typora、PicGO和腾讯云COS腾讯云COS配置PicGO配置Typora配置 Typora&#xff0b;PicGO&#xff0b;腾讯云COS做图床…

MyBatis完成单表的CRUD

提示&#xff1a;如果没有基础的可以看我的博客 > MyBatis概述与MyBatis入门程序 MyBatis完成单表的CRUD 一、准备工作二、Insert&#xff08;Create&#xff09;1.使用 map 的方式插入数据&#xff08;1&#xff09;编写 SQL 语句&#xff08;2&#xff09;编写测试代码&am…

数据分析(一) 理解数据

1. 描述性统计&#xff08;summary&#xff09; 对于一个新数据集&#xff0c;首先通过观察来熟悉它&#xff0c;可以打印数据相关信息来大致观察数据的常规特点&#xff0c;比如数据规模&#xff08;行数列数&#xff09;、数据类型、类别数量&#xff08;变量数目、取值范围…

文生图提示词:天气条件

天气和气候 --天气条件 Weather Conditions 涵盖了从基本的天气类型到复杂的气象现象&#xff0c;为描述不同的天气和气候条件提供了丰富的词汇。 Sunny 晴朗 Cloudy 多云 Overcast 阴天 Partly Cloudy 局部多云 Clear 清晰 Foggy 雾 Misty 薄雾 Hazy 朦胧 Rainy 下雨 Showers …

【Leetcode刷题笔记】27. 移除元素

原题链接 Leetcode 27. 移除元素 题目 给你一个数组 nums 和一个值 val&#xff0c;你需要原地移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。…

js---webAPI

01 声明变量 js组成&#xff1a; DOM:操作网页内容的,开发页面内容特效和实现用户交互 BOM: DOM树&#xff1a;将 HTML 文档以树状结构直观的表现出来&#xff0c;我们称之为文档树或 DOM 树 文档树直观的体现了标签与标签之间的关系 CSS获取元素的方法 document.querySele…

stm32h750中文数据手册以及中文参考手册

stm32h750中文数据手册以及中文参考手册 &#x1f527;腾讯交互翻译&#xff1a;https://transmart.qq.com/zh-CN/file&#x1f528;PDF拆分合并工具集在线&#xff1a;https://www.ilovepdf.com/zh-cn ✨就目前来讲&#xff0c;stm32h750VB芯片价格&#xff0c;算是历史新低&a…

Mybatis-Plus常用技巧

一、官网网站&#xff1a; https://baomidou.com/pages/24112f/#%E7%89%B9%E6%80%A7 技巧和常用方法在官网使用 二、离线安装MybatisX插件-free 1、在idea官网下载插件的zip压缩包&#xff0c;上链接&#xff08;https://plugins.jetbrains.com/&#xff09; 2、在搜索框搜…

模型训练 —— AI算法初识

一、背景 AI算法中模型训练的主要目的是为了让机器学习算法从给定的标注数据中学习规律、特征和模式&#xff0c;并通过调整模型内部参数&#xff0c;使模型能够对未见过的数据进行准确预测或决策。具体来说&#xff1a; 1. **拟合数据**&#xff1a;模型通过训练来识别输入数…

Android下SF合成流程重学习之onMessageInvalidate

Android下SF合成流程重学习之onMessageInvalidate 引言 虽然看了很多关于Android Graphics图形栈的文章和博客&#xff0c;但是都没有形成自己的知识点。每次学习了&#xff0c;仅仅是学习了而已&#xff0c;没有形成自己的知识体系&#xff0c;这次趁着有时间&#xff0c;这次…

外汇天眼:8个平台被打击,有的因诈骗被处罚!

上周&#xff0c;澳大利亚证券和投资委员会&#xff08;ASIC&#xff09;取消了总部位于悉尼的Brava Capital的澳大利亚金融服务许可证&#xff08;AFSL&#xff09;&#xff0c;意大利公司和交易委员会CONSOB则将6个非法投资平台网站列入黑名单。另外&#xff0c;Reiwa-Capita…

uni-app使用uView打开弹出层后输入框聚焦时placeholder错位问题

这里就不放效果了&#xff0c;大概意思就是在使用uView的popus时&#xff0c;在底部弹出后&#xff0c;如果弹窗中的输入框会造成一瞬间的placeholder文字错位&#xff0c;这个问题的主要是因为uView安全区适配导致 uView相关文档 https://www.uviewui.com/components/safeAr…

视频如何去除水印?这三个方法赶紧收藏

在数字化内容的海洋中&#xff0c;视频已成为我们日常生活中不可或缺的一部分。然而&#xff0c;很多时候&#xff0c;我们渴望观看的优质视频内容却被水印所困扰。因此我们就需要视频去水印工具来帮助我们解决这些困扰。 一、水印云 水印云的视频去水印功能采用了先进的 AI …

自己部署一个牛逼的开发备忘录系统

目录 效果 简介 安装 使用 效果 简介 为开发人员分享快速参考备忘清单【速查表】。这是英文版 Reference 的中文版本&#xff0c;目的是为了方便自己的技术栈查阅&#xff0c;如果您提供一个清单&#xff0c;我将抽空搬运&#xff0c;立即撸起来 :)。如果您发现此处的备忘单…