祝大家新的一年幸福安康!
- (o’∀’)ノ。+。゚☆I wish you a happy new year☆゚。+。ヽ (‘∀’o)
- 尼科彻斯定理_牛客题霸_牛客网 (nowcoder.com)
- 等差数列_牛客题霸_牛客网 (nowcoder.com)
#include<stdio.h> #include<string.h> int main(int argc, char const *argv[]) { int m = 0; char strb[999]={0}; while (scanf("%d", &m) != EOF) { memset(strb, 0x00, sizeof(strb));//为每次迭代清空代码 int sum = m*m*m; int a1= sum/m - (m - 1); sprintf(strb, "%d", a1); for (int i = 1; i < m; i++) { a1 += 2; strcat(strb, "+"); sprintf(strb+strlen(strb), "%d", a1);//使用strlen(strb)可以计算出strb当前的长度(不包括终止字符'\0'),这样你就可以将新字符串附加到strb的末尾,而不是覆盖其他部分。如果不加上strlen(strb),那么新字符串将被附加到strb的起始位置,这可能会导致覆盖strb中的其他内容 } printf("%s\n", strb); } return 0; }
下面我们来逐行解释以下代码:
int main(int argc, char const *argv[])
:定义主函数,其中argc
是命令行参数的数量,argv
是命令行参数的数组。int m = 0;
定义一个整数变量m
并初始化为0。这个变量将用于存储从标准输入读取的正整数。char strb[999]={0};
定义一个字符数组strb
,长度为999,并初始化为0。这个数组将用于存储生成的字符串。memset(strb, 0x00, sizeof(strb));
:使用memset
函数将strb
数组的所有元素设置为0。关于memset函数的用法,我将放在下面:int sum = m*m*m;
计算整数m
的三次方,并将结果存储在变量sum
中。int a1= sum/m - (m - 1);
计算一个中间值并将其存储在变量a1
中。sprintf(strb, "%d", a1);
将变量a1
的值转换为字符串并存储在strb
中。for (int i = 1; i < m; i++)
使用for循环,从1迭代到m-1
。a1 += 2;
:将变量a1
的值增加2。strcat(strb, "+");
:将加号"+"添加到字符串strb
的末尾。以下说明strcat函数的用法:sprintf(strb+strlen(strb), "%d", a1);
将变量a1
的值转换为字符串并添加到字符串strb
的末尾。- 这个程序的主要逻辑是根据输入的整数m来生成一个特定的字符串表示形式,并将这个字符串打印出来。这个表示形式是基于以下规则的:首先计算m的三次方,然后根据这个结果和m的当前值来计算一个中间值,最后将这个中间值和其他一些值(每个值都比前一个大2)添加到一个字符串中,并在每个值之间添加加号"+"。
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { int n = 0; scanf("%d", &n); int sum = 0; for (int i = 2;n>0; i+=3) { sum += i; n--; } printf("%d", sum); return 0; }