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

文章目录

  • 题目描述:用连续自然数之和来表达整数
  • 输入描述
  • 输出描述
  • 用例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() 则会使用这个比较函数来决定如何对数组进行排序。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于学习的参数化查询优化方法

一、背景介绍 参数化查询是指具有相同模板&#xff0c;且只有谓词绑定参数值不同的一类查询&#xff0c;它们被广泛应用在现代数据库应用程序中。它们存在反复执行动作&#xff0c;这为其性能优化提供了契机。 然而&#xff0c;当前许多商业数据库处理参数化查询的方法仅仅只…

大顶堆、小顶堆

堆 堆堆的维护1.自我初始化代码2.插入时维护时间复杂度 代码如有误欢迎指出 本文是最近在整理排序算法的时候写到堆排序单拎出来写的&#xff0c;目前只有维护代码 堆 堆是一颗完全二叉树&#xff0c;同时保证所有双亲都比自己的孩子大&#xff08;可以相等 堆的维护 使用数…

【无标题】力扣报错:member access within null pointer of type ‘struct ListNode‘

项目场景&#xff1a; 做单链表反转题目&#xff0c;报错&#xff1a;member access within null pointer of type ‘struct ListNode’ 题目链接:LINK 问题描述 我明明在初始化指针时候&#xff0c;已经处理了n2->next情况却依然报错 这个报错提示含义是&#xff1a;大概就…

VNCTF2024misc方向部分wp

文章目录 sqlsharkLearnOpenGLez_msbOnlyLocalSql sqlshark tshark -r sqlshark.pcap -Y "http" -T fields -e frame.len -e http.file_data > data.txt不太像常规的盲注&#xff0c;一次性发送两条很类似的payload&#xff0c;比常规的多了一个least在判断passw…

C语言——从头开始——深入理解指针(1)

一.内存和地址 我们知道计算上CPU&#xff08;中央处理器&#xff09;在处理数据的时候&#xff0c;是通过地址总线把需要的数据从内存中读取的&#xff0c;后通过数据总线把处理后的数据放回内存中。如下图所示&#xff1a; 计算机把内存划分为⼀个个的内存单元&#xff0c;每…

python-pyqt5-工具按钮(QToolButton)添加菜单(QMenu)

QToolButton提供了比普通按钮更丰富的功能。它可以显示一个图标、一个文本或二者结合&#xff0c;还支持各种样式和行为&#xff0c;例如弹出菜单或多种动作模式 样式 setToolButtonStyle(Qt.ToolButtonStyle) # 设置按钮样式风格# 参数Qt.ToolButtonIconOnly …

Window系统GPT-SoVITS配置安装

GPT-SoVITS配置安装 GPT-SoVITS配置Python下载以及安装源文件安装依赖 运行整理在安装配置环境时遇到的报错总结 GPT-SoVITS配置 作者链接 Python下载以及安装 版本这里根据教程的版本走即可&#xff0c;这里不会安装python或者不会配置环境的参考我之前的文章 Python 3.9,…

Requests教程-11-重定向与请求历史

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上小节中&#xff0c;我们学习了requests的Session会话对象&#xff0c;本小节我们讲解一下requests的重定向与请求历史。 重定向的定义&#xff1a; 重定向(Redirect)就是通过各种方法将各种网络请求重新定个方…

STM32 TIM输入捕获测频率占空比库函数

目录 一、输入捕获初始化函数 TIM_ICInit TIM_PWMIConfig TIM_ICStructInit 二、主从触发模式对应函数 TIM_SelectInputTrigger TIM_SelectOutputTrigger TIM_SelectSlaveMode 三、配置分频器函数 TIM_SetIC1Prescaler TIM_SetIC2Prescaler TIM_SetIC3Prescaler T…

浅谈木材加工企业的电气火灾隐患及电气火灾监控系统的应用

摘要&#xff1a;本文分析了木材加工企业的特点、现状及常见电气火灾隐患&#xff0c;提出了消灭电气火灾隐患的措施。结尾介绍了木材加工企业常用电气设备的选用及电气火灾监控系统在其低压配电系统的应用方案及产品选型。 关键词&#xff1a;木材加工企业&#xff1b;电气火…

kafka的安装,用于数据库同步数据

1.0 背景调研 因业务需求&#xff0c;需要查询其他部门的数据库数据&#xff0c;不方便直连数据库&#xff0c;所以要定时将他们的数据同步到我们的环境中&#xff0c;技术选型选中了kafkaCDC Kafka是Apache旗下的一款分布式流媒体平台&#xff0c;Kafka是一种高吞吐量、持久…

微服务—RabbitMQ高级(延迟消息)

本博客为个人学习笔记&#xff0c;学习网站&#xff1a;2023黑马程序员RabbitMQ入门到实战教程 高级篇章节 目录 延迟消息 死信交换机 延迟消息插件 下载安装 延迟交换机声明 ​编辑 发送延迟消息 订单状态同步问题 延迟消息 在电商的支付业务中&#xff0c;对于一些库…

基于springboot学生就业管理系统源码和论文

随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;学生就业管理系统也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#xff0c;而…

word中插入代码

可以先把代码在highlightcode 中格式化后复制插入 highlightcode地址&#xff1a;https://highlightcode.com/ 复制到word后效果&#xff0c;可以看到美观多了 原始效果

Java面试题:volatile专题

王有志,一个分享硬核Java技术的互金摸鱼侠 加入Java人的提桶跑路群:共同富裕的Java人 今天是《面霸的自我修养》第4篇文章,我们一起来看看面试中会问到哪些关于volatile的问题吧。数据来源: 大部分来自于各机构(Java之父,Java继父,某灵,某泡,某客)以及各博主整理文档…

基于uniapp微信小程序的汽车租赁预约系统

随着现代汽车租赁管理的快速发展&#xff0c;可以说汽车租赁管理已经逐渐成为现代汽车租赁管理过程中最为重要的部分之一。但是一直以来我国传统的汽车租赁管理并没有建立一套完善的行之有效的汽车租赁管理系统&#xff0c;传统的汽车租赁管理已经无法适应高速发展&#xff0c;…

leetcode面试题 02.07. 链表相交

leetcode面试题 02.07. 链表相交 题目 思路 方案一&#xff1a;使用哈希表储存一个链表节点&#xff0c;在另一个链表进行查询是否有相同节点方案二&#xff1a;统计两个链表长度&#xff0c;然后末尾对齐&#xff0c;判断是否有相同节点 代码 使用哈希表set # Definition…

新手搭建服装小程序全攻略

随着互联网的快速发展&#xff0c;线上购物已经成为了人们日常生活中不可或缺的一部分。服装作为人们日常消费的重要品类&#xff0c;线上化趋势也日益明显。本文将详细介绍如何从零开始搭建一个服装小程序商城&#xff0c;从入门到精通的捷径&#xff0c;帮助你快速掌握小程序…

compile 未产生 target 目录

Problem 执行compile操作之后未产生对应的target目录 右击Project → Tree Appearance → Show Excluded Files

vue3项目配置按需自动导入API组件unplugin-auto-import

场景应用&#xff1a;避免写一大堆的import&#xff0c;比如关于Vue和Vue Router的 1、安装unplugin-auto-import npm i -D unplugin-auto-import 2、配置vite.config import AutoImport from unplugin-auto-import/vite//按需自动加载API插件 AutoImport({ imports: ["…