为什么我看完这一章不知道该写啥?。。整体来看是比较基础的。
1.if-else语句的每个分支的形式都差不多,我们可以用数组来使循环简单一点。数组中每个点表明一个阶段,用level[i]表示阶段i的起始点,tax[i]表示阶段i的税率,用have [i]表示这个阶段已经有的税收,然后得到收入后二分到相应的阶段,计算税收。
2.不知所云(用递归实现应该很简单,不用数组的话代码量会比较大)。
3.这个不会,看了答案了。这个方法的精髓就是把重复出现n次的字符用 n+‘字符’来表示,重复出现的行用同样的方法可以得到。这个方法给了我很大的启示,以前没有思路的一道题目,瞬间来了灵感。
4.实现如下
#include<iostream> #include<string> #include<vector> using namespace std; int month[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 // 1 2 3 4 5 6 7 8 9 10 11 12 }; class D{ public: int year,mon,day;// 1900 <= year, 1 <= mon <= 12, // 1 <= day <= 31 D(){} D(int y, int m, int d): year(y),mon(m),day(d){} int yearday(void){//返回这一天是这一年的第几天 int sum = day; for( int i = 1; i < mon; i++ ) sum += month[i]; if( isrun() && mon > 2 ) sum ++; return sum; } bool isrun( void ){//是否是闰年 return (year%4==0&&year%100!=0)||(year%400==0); } }; int dist( D d1, D d2 ){//两个日期相差的天数 int sum = -(d1.yearday()); for( ; d1.year < d2.year ; d1.year++ ) sum += d1.isrun()?366:365; return sum + d2.yearday(); } int xingqiji( D d ){//某一天是星期几 D temp(1900,1,1); return dist( temp, d )%7+1; } int print(int year, int mon ){//输出某月日历 D d(year, mon, 1 ); int week = xingqiji(d); int sum = month[ mon ]; for( int i = 1; i < week; i++ ) cout << " "; for( int i = 1; i <= sum; i++){ cout << i << " "; if( week == 7 ){ week = 1; cout << endl; } else week++; } cout << endl; } int main(void){ D a(2012,6,3); cout << xingqiji(a) << endl; print(1990,2); return 0; }
5.从前到后进行比较,符合一个输出就行。
6.略。
7.其实,我没有看懂题意
8.转化为一道题目,是zoj1146,我的解答在这里。