【考研复试上机】Ch1 暴力求解

枚举

条件:数据量较小

模拟

图形排版

题解:

  • 找规律
  • 先构造,后输出。利用一个缓存数组来表示将要输出的字符阵列,然后在该数组上按照自己的需要完成排版,最后再输出图形。

日期问题

题解:

  • 预处理:再真正开始处理输入数据之前,预处理出所有月份的天数并保存。
  • 闰年:有29天,普通年分的2月只有28天。
  • 都可以转化为用该日期是今年的第几天?+第几天的日期是什么(两个逆运算)来解决问题。
//判断平年还是闰年
bool IsLeapYear(int year){
    return (year%4==0 && year%100!=0)||(year%400==0);
}
//平年闰年天数
int NumberOfYear(int year){
    if(IsLeapYear(year)){
        return 366;
    }
    else{
        return 365;
    }
}

判断日期是否合法

int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};

bool check(int year,int month,int day)
{
    if(month==0||month>12) return false;
    if(day==0) return false;
    if(month!=2)
    {
        if(day>days[month]) return false;
    }
    else 
    {
        int flag = (year%100&&year%4==0||year%400==0); //能被4整除,不能被100整除,能被400整除
        if(day>28+flag) return false; //闰年的2月有29天
    }
    return true;
}

今年的第几天?

int main(){
	int year,month,day;
	while(cin>>year>>month>>day){
        int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
		int flag = 0;
		int sumDays = 0;
		
		if(year%4==0&&year%100||year%400==0) flag = 1;
		if(flag == 1) days[2]+=1;
		
		for(int i=1;i

进制转换

P进制数x,转换为10进制数y

int y = 0, product = 1;
while(x){
    y+=(x%10)*product;
    x/=10;
    product*=p;
}

10进制数y,转换为Q进制数z

int z[40], num = 0;
do{
    z[num++] = y%Q;
    y/=Q;
}while(y); //z数组从高位z[num-1]到低位z[0]即为Q进制z

你可能感兴趣的:(考研复试,java,开发语言,考研,408,算法,数据结构)