电子商务网站建设薛万欣,东阳市城建设局网站,呼叫中心外包公司排名,企业解决方案榜单文章目录 1. 前言2. JZ64 求123...n2.1 题目分析2.2 代码 3. HJ73 计算日期到天数转换3.1 题目分析3.2 代码 4. KY222 打印日期4.1 题目分析4.2 代码 1. 前言
下面两个题目均来自牛客#xff0c;使用的编程语言是c#xff0c;分享个人的一些思路和代码。
2. JZ64 求123…n … 文章目录 1. 前言2. JZ64 求123...n2.1 题目分析2.2 代码 3. HJ73 计算日期到天数转换3.1 题目分析3.2 代码 4. KY222 打印日期4.1 题目分析4.2 代码 1. 前言
下面两个题目均来自牛客使用的编程语言是c分享个人的一些思路和代码。
2. JZ64 求123…n 2.1 题目分析
注意看题目描述要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句。 按照之前的想法可以用递归循环等差求和但是这里都被限制了那么该怎么办呢
那么就走构造函数先定义一个Sum类其中包含两个静态变量。这两个变量并不是属于这个某个对象而是属于整个类。 在构造函数里面走静态变量每次加等_i,再让_i加加。 现在就存在一个问题怎么让Sum调用n次 那就构造n个对象就可以了用数组来构造就行。
要拿到最后的结果还得再写一个成员函数来返回最后得到的_ret值因为是再整个类中所以使用static修饰。 这样就通过了。
2.2 代码
class Sum
{private:static int _i;static int _ret;public:Sum(){_ret_i;_i;}static int GetRet(){return _ret;}};
int Sum::_i1;
int Sum::_ret0;
class Solution {
public:int Sum_Solution(int n) {Sum s[n];return Sum::GetRet(); }
};3. HJ73 计算日期到天数转换 3.1 题目分析
题目要求根据输入的日期计算是这一年的第几天。 我们会直接想到把每个月的天数直接相加就行但是前提是得知道每个月有多少天而2月份在闰年是29所以得先判断一下是不是闰年。 就先写一个函数来判断是不是闰年如果是就返回true,不是就返回false。
bool is_is_Leapyear(int year) {if (year % 400 0 || (year % 4 0 year % 100 ! 0)) {return true;}else {return false;}
}要直接相加对应月的天数直接写一个数组来表示每个月有多少天让对应的下标就是对应的月。 int monthDays[13] { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };在设计求和的时候会出现把当月的天数直接相加的但是会存在这个月并不是刚好是最后一天所以得事先将求和的变量直接定义成那个月所对应的天 int sum d;
在实现相加之前可以先判断是不是闰年而且月份必须大于2月份相加的时候才会先多加1。 再让月份减减实现每个月对应的都相加上最后将总和的天数sum输出就行。
3.2 代码
#include iostream
using namespace std;bool is_Leapyear(int year) {if (year % 400 0 || (year % 4 0 year % 100 ! 0)) {return true;}else {return false;}
}int main() {int y, m, d;int monthDays[13] { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };cin y m d;// 注意 while 处理多个 caseint sum d;if (is_is_Leapyear(y)) {if (m 2) {sum sum 1;}}while (m) {m--;sum monthDays[m];}cout sum endl;
}4. KY222 打印日期 4.1 题目分析
这里与上面的计算日期到天数转换类似不过这里是给定天数来计算日期。 同样先写一个判断是不是闰年的函数。 这里因为要用到减所以先定义两个数组一个是闰年的一个不是。 int monthDays[12] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };int monthDays_[12] { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };我们了解到月份中最小的是2月份最少是28天可以作为循环的条件。 但是得注意如果事先给的日期小于28并不是0月而是1月这里就得在定义月份的时候直接先定为1int m 1;。 在减对应月份的日期时候得注意判断条件必须是那个月份对应的日期而且闰年与平年还是不一样的所以这里是这样写的。 if (is_Bisseextile(y)){if (d monthDays_[m-1]){d d - monthDays_[m-1];}elsebreak;}else if(d monthDays[m-1]){d d - monthDays[m-1 ];}注意题目最后的打印它格式是有要求的 所以这里的打印得这样写
printf(%04d-%02d-%02d\n, y, m, d);4.2 代码
#include iostream
using namespace std;bool is_Bisseextile(int year) {if (year % 400 0 || (year % 4 0 year % 100 ! 0)) {return true;}else {return false;}
}int main() {int y, d;int monthDays[12] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };int monthDays_[12] { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };while (cin y d) {// 注意 while 处理多个 caseint m 1;while (d 28){if (is_Bisseextile(y)){if (d monthDays_[m-1]){d d - monthDays_[m-1];}elsebreak;}else if(d monthDays[m-1]){d d - monthDays[m-1 ];}m;}printf(%04d-%02d-%02d\n, y, m, d);}
}有问题请指出大家一起进步吧