机试练习第二天

模拟——图形问题
细心就好,就是按特定规则输出字符。
第一题:输入一个高度h,输出一个高度为h,上底边长度为h的梯形。
思路:表示一下每一行空格的数量,两层循环输出即可。

#include <iostream>
#include <cstdio>

using namespace std;

int main(){
	int h;
	while(scanf("%d",&h)!=EOF){ //循环语句防止测试用例不止一组的情况
		int row=h;
		int col=3*h-2;
	
	    for(int i=1;i<=row;i++){
	        for(int j=1;j<=col;j++){
	 	        if(j<=2*row-2*i){
	 	    	    printf(" ");
			    }
			    else{
				    printf("*");
			    } 
	        }	    
	        printf("\n");
        }
    }
	return 0;
} 

第二题:叠筐问题
输入一个三元组,分别是外筐尺寸n,中心花色字符,外筐花色字符。
思路:二维数组排位置,最后输出打印。

#include <iostream>
#include <cstdio>

using namespace std;

int main(){
	int n;
	char a;
	char b;
    while(scanf("%d %c %c",&n,&a,&b)){
    	char c[n][n];
    	char right;
    	for(int i=0;i<(n+1)/2;i++){ //第几圈 
		    if(((n+1)/2)%2==0){
			    if(i%2==0){    //这一圈该是什么 
    			    right=b;
			    }
			    else{
			        right=a;
    	        }
    	    }
    	    else{
    	    	if(i%2==0){    //这一圈该是什么 
    			    right=a;
			    }
			    else{
			        right=b;
    	        }
			}
			for(int j=0;j<n;j++){    //把这一圈写进数组 
    			if(j>=i && j<=n-1-i){
    				c[j][i]=right;
    				c[i][j]=right;
    				c[j][n-1-i]=right;
    				c[n-1-i][j]=right;
				}
			}  
		}
				
		//输出数组 
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				//四个角不输出
				if((i==0||i==n-1)&&(j==0||j==n-1)) {
					printf(" ");
				}
				else
				    printf("%c",c[i][j]);
			}	
			printf("\n");
		} 
	}
	return 0;
} 

模拟——日期问题
日期类题目需要注意的问题:
闰年判断规则:( y%4 == 0 && y%100!=0 ) || ( y%400 == 0 )
闰年2月29天,其它的28天
31天的月份是:1 3 5 7 8 10
第一题:输入年、月、日,计算该天是本年的第几天。

#include <iostream>
#include <cstdio>

using namespace std;

int main(){
	
	int y;
	int m;
	int d;
	while(scanf("%d %d %d",&y,&m,&d)!=EOF){ 
		int days=0;		
	 	for(int i=1;i<m;i++){
	 	   	if(i==1||i==3||i==5||i==7||i==8||i==10){
	 	   		days+=31;
			}
			
			else if(i==2){
				if((y%4==0 && y%100!=0)||(y%400==0)){
					days+=29;
				}
				else
				    days+=28;
			}
			
			else{
				days+=30;
			}     
		}
		days+=d;
		printf("%d\n",days);
	}
	return 0;
} 

第二题:给出年份m和一年中的第n天,算出第n天是几月几号,并按yyyy-mm-dd的格式打印出来
注:不足位前面补0的做法:printf("%04d-%02d-%02d\n",m,mouth,day);

#include <iostream>
#include <cstdio>

using namespace std;

int main(){	
	int m;
	int n;
	while(scanf("%d %d",&m,&n)!=EOF){ 
	    bool b=true;
	    int mouth=0;
	    int day;
	    while(b){
	    	mouth++;
	    	if(mouth==1||mouth==3||mouth==5||mouth==7||mouth==8||mouth==10){
	    		if(n>31){
	    			n=n-31;
				}
				else{
					day=n;
					b=false;
				}
			}			
			else if(mouth==2){
	    		if((m%4==0&&m%100!=0)||m%400==0){
	    			if(n>29){
	    			    n=n-29;
				    }
				    else{
					    day=n;
					    b=false;
				    }
				}				
				else{
					if(n>28){
	    			    n=n-28;
				    }
				    else{
					    day=n;
					    b=false;
				    }
				}
			}		
			else{
				if(n>30){
	    			n=n-30;
				}
				else{
					day=n;
					b=false;
				}
			}
		}		
		printf("%04d-%02d-%02d\n",m,mouth,day);
	}
	return 0;
} 

第三题:设计一个程序,能计算一个日期加上若干天后的时期是什么
输入:第一行代表样例个数m,接下来m行,每行4个整数,代表年、月、日和累加天数。
输出:输出m行,每行按yyyy-mm-dd输出
<注>:其实日期题书上都是一种做法,在前两道题中和我自己写的难易程度差不多。但这道题涉及到了可能跨年甚至跨好几年,是前两道题的结合版,这样看的话我如果还写逻辑判断就过于复杂了,因此这里记录一下书上的做法。真正要是机试遇到了,要记得还有这种做法。

#include <iostream>
#include <cstdio>

using namespace std;

int daytab[2][13]={
	{0,31,28,31,30,31,30,31,31,30,31,30,31},
	{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
	
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 main(){
	int year,month,day;
	int number;
	int caseNumber;
	scanf("%d",&caseNumber);
	
	while(caseNumber--){
		scanf("%d %d %d %d",&year,&month,&day,&number);
		//将输入日期转化为天数 
		int row =IsLeapYear(year);
		for(int j=0;j<month;++j){
			number+=daytab[row][j];
		}
		//加上若干天 
		number+=day;
		//将天数转化回日期 
		while(number>NumberOfYear(year)){
			number-=NumberOfYear(year);
			year++;
		}
		month=0;
		row=IsLeapYear(year);
		while(number>daytab[row][month]){
			number-=daytab[row][month];
			month++;
		}
		day=number;
		printf("%04d-%02d-%02d",year,month,day);
	}
	return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值