C语言每日一练------(Day3)

这篇具有很好参考价值的文章主要介绍了C语言每日一练------(Day3)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。

今天练习题的关键字: 尼科彻斯定理 等差数列

C语言每日一练------(Day3),c语言天天练,c语言,开发语言,等差数列

💓博主csdn个人主页:小小unicorn
⏩专栏分类:C语言天天练
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识

题目一:

题目描述:

验证尼科彻斯定理…即:任何一个整数m的立方都可以写成m个连续奇数之和。 题目来源

例如:
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19
输入一个正整数m(m≤100),将m的立方写成m个连续奇数之和的形式输出。
数据范围:
1≤m≤100
进阶:时间复杂度: O(m) ,空间复杂度:O(1)

输入描述:
输入一个int整数

输出描述:
输出分解后的string

C语言每日一练------(Day3),c语言天天练,c语言,开发语言,等差数列

解题思路:

思路一:

写几组例子:

1^3=1 —>1
2^3=3+5 ----> 4
3^3=7+9+11 —> 9
4^3=13+15+17+19 —> 16

我们会发现一个规律:
n x n x n=n x n两边的n个奇数相加。

代码实现:

#include <stdio.h>

int main() 
{
    int n=0;
    scanf("%d",&n);
    int m1=n*(n-1);
    int m2=n*(n+1);
    for(int i=m1+1;i<m2-1;i+=2)
    {
        printf("%d+",i);
    }
    printf("%d",m2-1);

    return 0;
}

思路二:

m的立方,也就是m个m^2 的和相加,m个m^2 可以理解为m个等差为2,首项为m^2-m+1的数列, 即:m2-m+1,m2-m+3, …m2+m-1 共m项

eg: m=6
m1=6x6-6+1 =31
m2=6x6-6+1 +2 =33
m3=6x6-6+1+2+2 =35
m4=6x6-6+1+2+2+2 =37
m5=6x6-6+1+2+2+2+2 =39
m6=6x6-6+1+2+2+2+2+2 = 41
6x6x6=36x6=(36+36+36+36+36+36)=(36-1)+(36+1)+(36-3)+(36+3)+(36-5)+(36+5)

#include <stdio.h>
#include <string.h>
int main(void)
{
    int m;
    scanf("%d",&m);
    int *arr;
    arr=(int*)malloc(sizeof(int)*m);//分配m个int字节空间
    
    for(int i=0;i<m;i++)
    {
        if(i==0)
            arr[i]=m*m-m+1;// 数列首项a[0]
        else
            arr[i]=arr[i-1]+2;//通项:a[n]=a[n-1]+2
    }
    for(int i=0;i<2*m-1;i++)
    {
        if(i%2==0)
            printf("%d",arr[i/2]);//偶数项打印数列
        else
            printf("%c",'+');//奇数项打印“+”号,但是最后项不能打印‘+’号,所以i<2*m-1,而不是i<2*m
    }
    return 0;
}

思路三:

认真对题目分析,可以将题目转换为:
已知等差数列前n项和,求a0问题。

等差数列求和公式为:Sn=nxa0+1/2n(n-1)d.
本题的公差为2也就是d为2.

由此可输出前n项和。

代码实现:

#include<stdio.h>

int main()
{
   int m;
   scanf("%d",&m);
   int sn=m*m*m;

   int a0=sn/m-m+1;
   printf("%d",a0);
   for(int i=1;i<m;i++)
   {
    printf("+%d",a0+2*i);
   }
    printf("\n");
    return 0;
}

结果情况:

C语言每日一练------(Day3),c语言天天练,c语言,开发语言,等差数列
符合题目要求,问题得到解决。

题目二:

题目描述:

等差数列 2,5,8,11,14。。。。(从 2 开始的 3 为公差的等差数列)
输出求等差数列前n项和
数据范围: 1≤n≤1000
题目来源

输入描述:
输入一个正整数n。

输出描述:
输出一个相加后的整数。

解题思路:

有了第一题的经验。第二题更简单,直接带等差数列求和公式即可。

代码实现:

#include<stdio.h>
int main() 
{
    int a1 = 2, d = 3, an = 0, n = 0, Sn = 0;
    while (scanf("%d", &n) == 1) 
    {
        an = a1 + (n - 1) * d;
        Sn = (a1 + an) * n / 2;
        printf("%d", Sn);
    }
}

结果情况:

C语言每日一练------(Day3),c语言天天练,c语言,开发语言,等差数列
符合题目要求,问题得到解决。

总结:

今天的两道编程练习题,会发现有一个共同点,那就是都用到了等差数列的相关知识,所以解决有的问题卡主了,我们可以尝试将它转化为一个数学问题,用数学知识解决它。

文章到这里就要告一段落了,有更好的想法或问题,欢迎评论区留言。
希望今天的练习能对您有所收获,咱们下期见!文章来源地址https://www.toymoban.com/news/detail-685497.html

到了这里,关于C语言每日一练------(Day3)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【学会动态规划】等差数列划分(22)

    目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 学习一个算法没有捷径,更何况是学习动态规划, 跟我一起刷动态规划算法题,一起学会动态规划! 题目链接:413. 等差数列划分 - 力扣(

    2024年02月11日
    浏览(44)
  • 1027. 最长等差数列【leetcode】/动态规划

    给你一个整数数组 nums,返回 nums 中最长等差子序列的长度。 回想一下,nums 的子序列是一个列表 nums[i1], nums[i2], …, nums[ik] ,且 0 = i1 i2 … ik = nums.length - 1。并且如果 seq[i+1] - seq[i]( 0 = i seq.length - 1) 的值都相同,那么序列 seq 是等差的。 示例 1 : 输入 :nums = [3,6,9,12] 输出 :

    2024年02月21日
    浏览(29)
  • 【LeetCode】446. 等差数列划分II -- 子序列

    题目链接 我们要知道以某个位置为结尾的子序列的数量,可以通过它的以上一位置的为结尾的子序列的数量得知,也就是说,这是一个dp问题。 dp问题我们需要创建dp表,如果我们单纯使用dp[i]来表示以 i 位置为结尾的子序列的数量是完全不够的。因为我们不知道以 i-1 位置为

    2024年02月14日
    浏览(42)
  • C语言每日一练------------Day(7)

    本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题: 两个数组的交集     双指针 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C语言天天练 🚚代码仓库:

    2024年02月10日
    浏览(32)
  • C语言每日一练--------Day(8)

    本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题: 图片整理 寻找数组下标 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C语言天天练 🚚代码仓库:小小u

    2024年02月10日
    浏览(34)
  • C语言每日一练------Day(5)

    本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题: 错误的集合 密码检查 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C语言天天练 🚚代码仓库:小小unic

    2024年02月11日
    浏览(24)
  • C语言每日一练--Day(15)

    本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题: 珠玑妙算 两数之和 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C语言天天练 🚚代码仓库:小小unicorn的

    2024年02月10日
    浏览(33)
  • C语言每日一练--------Day(11)

    本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题: 找到数组中消失的数字 哈希表 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C语言天天练 🚚代码仓库:

    2024年02月10日
    浏览(37)
  • C语言每日一练------Day(6)

    本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题: 整数转换 异或 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C语言天天练 🚚代码仓库:小小unicorn的代码

    2024年02月11日
    浏览(31)
  • 【动态规划刷题 12】等差数列划分&& 最长湍流子数组

    链接: 139. 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入: s = “leetcode”, wordDict = [“leet”, “code”] 输出: t

    2024年02月09日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包