湘西州建设银行网站百度图片搜索网页版
1.打印日期
给出年分m和一年中的第n天,算出第n天是几月几号。
输入描述:
输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。
输出描述:
可能有多组测试数据,对于每组数据, 按 yyyy-mm-dd的格式将输入中对应的日期打印出来。
#include <stdio.h>
#include <stdbool.h>
bool isrun(int y){ //判断是否是闰年if(y%400==0||(y%4==0&&y%100!=0)){return true;}return false;
}int main() {int y,d;scanf("%d %d",&y,&d);int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};if(isrun(y)){arr[2]=29;}int i = 1;while(d>arr[i]){d = d-arr[i];i++;}printf("%04d-%02d-%02d",y,i,d);return 0;
}
%d左对齐,输出变量的所有数字;%4d右对齐,宽度为4,左边填充空格,当变量的实际宽度大于4时,输出变量的所有数字;%04d与%4d的唯一区别就是左边填充0。
以%d,%4d,%04d,输出12时,结果是:
12
两个空格12
0012
2.日期累加
设计一个程序能计算一个日期加上若干天后是什么日期。
输入描述:
输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。
输出描述:
输出m行,每行按yyyy-mm-dd的个数输出。
#include <stdio.h>
#include <stdbool.h>
bool isrun(int y){if(y%400==0||(y%4==0&&y%100!=0)) return true;return false;
}int main() {int n,y,m,d,num;int f=365; // 一年天数scanf("%d",&n);while(n--){scanf("%d %d %d %d",&y,&m,&d,&num);int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};if(isrun(y)){arr[2]=29;f=366;}// 判断原始日期为哪一天int old_day=0;for(int j=1;j<m;j++){old_day+=arr[j];}old_day+=d;int new_day=0;new_day = old_day + num;int i=1;if(new_day<=f){ // 没超过一年while(new_day>arr[i]){new_day-=arr[i];i++;}}else{y++; //新的一年new_day-=f; // 减去去年的天数if(isrun(y)){arr[2]=29;f=366;} else{arr[2]=28;f=365;}while(new_day>arr[i]){new_day-=arr[i];i++;}}printf("%04d-%02d-%02d\n",y,i,new_day);}return 0;
}
基本思路
原来日期是一年中的具体天数,再加上天数等于新的具体天数,在此过程中要注意判断闰年,以及跨年考虑新的一年是否是闰年
3.剩下的树
有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,…,L共L+1个位置上有L+1棵树。 现在要移走一些树,移走的树的区间用一对数字表示,如 100 200表示移走从100到200之间(包括端点)所有的树。 可能有M(1<=M<=100)个区间,区间之间可能有重叠。现在要求移走所有区间的树之后剩下的树的个数。
输入描述:
两个整数L(1<=L<=10000)和M(1<=M<=100)。 接下来有M组整数,每组有一对数字。
输出描述:
可能有多组输入数据,对于每组输入数据,输出一个数,表示移走所有区间的树之后剩下的树的个数。
#include <stdio.h>int main() {int L,M;scanf("%d %d",&L,&M);// 种树int tree[10001];for(int i=0;i<=L;i++){tree[i]=1;}// 挖树for(int j=0;j<M;j++){// 左右区间int l,r;scanf("%d %d",&l,&r);for(int k=l;k<=r;k++){tree[k]=0;}}// 数树int num=0;for(int i=0;i<=L;i++){if(tree[i]==1) num++;}printf("%d",num);return 0;
}