机试算法练习

前言

准备机试,参考了leetcode的C语言版手册,以及王道计算机刷题指南,一步一步来,记性不好,特做此笔记巩固,争取不断更新

暴力求解篇

反序数

求反序数、对称数等等

int Reverse(int x)
{
	int revx = 0;
	while(x!=0){
		revx *= 10;
		revx += x%10;
		x /= 10;
	}
	return revx;
}

日期问题

闰年

判断规则:

  1. 能被4整除,且不是100的倍数
  2. 能被400整除
    代码
bool IsLeapYear(int year){
	return (year%4==0&&year%100!=0)||(year%400==0)
}

例题
给出年份和第几天算几月几号
解答
代码还没养成行为规范,会继续改进的(哭)
想法走了歪路,以至于for循环写的很晦涩,其实直接按月份while不停加然后判断就行了
注意日期表达形式,加”0“,学到老,活到老

#include <iostream>
using namespace std;

bool IsLeapYear(int year){
	return (year%4==0&&year%100!=0)||(year%400==0);
}
int month[]={31,28,31,30,31,30,31,31,30,31,30,31};
int month1[]={31,29,31,30,31,30,31,31,30,31,30,31};
void printday(int n,int year,int *month)
{
    int mm=1;
    int day=0;
     int count=0;
    for(int i=0;i<12;i++)
            {
                if(count==n)break;
                else{
                    if((count+month[i])<n)
                    {
                        count+=month[i];
                        mm++;
                    }
                    else{
                        day=n-count;
                        count=n;
                    }
                }
            }
    if(mm<10)
    {
       cout<<year<<"-0"<<mm;  
    }
    else
    cout<<year<<"-"<<mm;
    if(day<10)cout<<"-0"<<day<<endl;
    else cout<<"-"<<day<<endl;
}

int main(){
    int year;
    int n;
    while(cin>>year>>n)
    {      
        if(IsLeapYear(year))
        {
            printday(n, year, month1);
        }
        else{
            printday( n,year, month);
        }
    }
    return 0;
}
星期Day of Week

有一个公式,记不下来,可以mark一下
隐藏条件:1年1月1号是星期一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值