当前位置: 首页 > news >正文

机试准备第六天

第一题是world for U,又全是英文,看不懂啊。。看答案过了

#include <stdio.h>
#include <string.h>
using namespace std;
int main(){
	char str[1000];
	char pattern[30][30] = {0};
	while(scanf("%s", str)!=EOF){
		int N = strlen(str);
		int n1, n2, n3;
		for(n2 = 3;n2 <= N; n2++){
			if((N + 2 - n2) % 2 == 0){
				n1 = (N + 2 - n2)/2;
				if(n1 <= n2){
					n3 = n1;
					break;
				}
			}
		}//得出n1 n2 n3的模拟值
		for(int i = 0; i < 29; i++){
			for(int j = 0; j < 29; j++)
				pattern[i][j] = ' ';
		}
		int x = 0;
		int y = 0;
		for(int i = 0; i < N;i++){
			if(i < n1 - 1){
				pattern[x][y] = str[i];
				++x;
			}
			else if(i < n1+n2-2){
				pattern[x][y] = str[i];
				++y;
			}
			else {
				pattern[x][y]=str[i];
				--x;
			}
		}
		for(int i = 0; i < n1; i++){
			printf("%s\n", pattern[i]);
		}
	}
}

第二题是旋转矩阵,数量关系好难找啊。发现思路不对,可以定义一个旋转函数,依次转90度,看哪个可以对上,而且我的思路不对,应该把原矩阵的空格信息去掉。调了半天把代码调出来了。

#include <stdio.h>
#include <string.h>
using namespace std;
int main(){
	int n;
	scanf("%d", &n);
	int arr1[10][10];
	int arr2[10][10];
	for(int i = 0; i < n;i++){//读入第一个矩阵,大小为n*(2*n-1)
	    for(int j = 0; j < n;j++){
	    scanf("%d", &arr1[i][j]);
	}
	}
	for(int i = 0; i < n;i++){//读入第二个矩阵,大小为n*(2*n - 1)
		for(int j = 0; j < n;j++){
	    scanf("%d", &arr2[i][j]);
	}
	}
	//判断是否为0,二维矩阵对应位置全部相等
	bool issame = true;
	for(int i = 0; i < n;i++){
		for(int j = 0; j < n;j++){
			if(arr1[i][j] != arr2[i][j]) issame = false;
		}
	}
	if(issame == true){
		printf("0");
		return 0;
	}
	//判断是否为90,二维矩阵
	bool is90 = true;
	for(int i =0; i < n;i++){
		for(int j = 0; j < n;j++){
			if(arr1[i][j] != arr2[j][n-1-i])
				is90 = false;
		}
	}
	if(is90 == true){
		printf("90");
		return 0;}
	bool is180 = true;
	for(int i =0; i < n;i++){
		for(int j = 0; j < n;j++){
			if(arr1[i][j] != arr2[n-1-i][ n-1-j])
				is180 = false;
		}
	}
	if(is180 == true){
		printf("180");
		return 0;}
	bool is270 = true;
	for(int i =0; i < n;i++){
		for(int j = 0; j < n;j++){
			if(arr1[i][j] != arr2[n-1-j][i])
				is270 = false;
		}
	}
	if(is270 == true){
		printf("270");
		return 0;
	}
	printf("-1");
}

答案思路是很清晰的。

#include <stdio.h>
using namespace std;
bool compare(int arr1[10][10], int arr2[10][10], int n){//对比函数
	for(int i = 0; i <n;i++){
		for (int j =0;j < n;j++){
			if(arr1[i][j] != arr2[i][j]) return false;
		}
	}
	return true;
}
void  revolve(int arr[10][10], int n){
	int result[10][10];
	for(int i = 0; i<n;i++){
		for(int j = 0; j < n;j++){
			result[i][j] = arr[n-1-j][i];
		}
	}
	for(int i = 0; i<n;i++){
		for(int j = 0; j < n;j++){
			arr[i][j] = result[i][j];
		}
	}
}
int main(){
	int n;
	scanf("%d", &n);
	int arr1[10][10];
	int arr2[10][10];
	for(int i = 0; i < n;i++){//读入原始矩阵
		for(int j = 0; j < n; j++){
			scanf("%d", &arr1[i][j]);
		}
	}
	for(int i = 0; i < n;i++){//读入第二个矩阵
		for(int j = 0;j<n;j++){
			scanf("%d", &arr2[i][j]);
		}
	}
	if(compare(arr1, arr2, n)){
		printf("0");
		return 0;
	}
	revolve(arr1, n);
	if(compare(arr1, arr2, n)){
		printf("90");
		return 0;
	}
	revolve(arr1, n);
	if(compare(arr1, arr2, n)){
		printf("180");
		return 0;
	}
	revolve(arr1, n);
	if(compare(arr1, arr2, n)){
		printf("270");
		return 0;
	}
	printf("-1");
}

进入日期问题。先来一道判断下一天的开胃小菜。

#include <stdio.h>
#include <string.h>
using namespace std;
void Nextday(int year, int month, int day){
	int dayofMonth[] = {0, 31, 28, 31,30,31,30,31,30,31,30,31,30};
	bool isLeap;//判断是否为闰月
	if(year%400==0||(year%4==0&&year%100!=0)) isLeap = true;
	else isLeap = false;
	if(isLeap){
		dayofMonth[2] = 29;
	}
	else {
		dayofMonth[2] = 28;
	}
	day++;
	if(day>dayofMonth[month]){
		month++;
		day = 1;
	}
	if(month>12){
		month = 1;
		day = 1;
		year++;
	}
	printf("Nextday year = %d, month = %d, day = %d\n", year, month,day);
}
int main(){
	int year = 2020;
	int month = 2;
	int day = 28;
	Nextday(year, month, day);
	return 0;
}

第四题是今年的第几天,简单拿下。

#include <stdio.h>
using namespace std;
int daynum(int year, int month, int day) {
    int dayofmonth[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
        dayofmonth[2] = 29;
    }
    int num = 0;
    if (month == 1) num = day;
    else {
        for (int i = 1; i < month; i++) {
            num += dayofmonth[i];
        }
        num += day;
    }
    return num;
}
int main() {
    int year, month, day;
    while (scanf("%d%d%d", &year, &month, &day) != EOF) {
        int result = daynum(year,  month, day);
        printf("%d\n", result);
    }
    return 0;
}

第五题是打印日期,就是上一题反着写,写的有点丑陋。

#include <functional>
#include <stdio.h>
using namespace std;
void find(int year, int daynum){
    int dayofmonth[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    if(year%400==0||(year%4==0&&year%100!=0)) dayofmonth[2]=29;
    int month;
    int day;
    int num;
    if(daynum<=31){
        month = 1;
        day = daynum;
    }
    else if (daynum == 365||daynum == 366) {
        month =12;
        day = 31;
    }
    else{
        for(int i = 1;i<=12;i++){
        daynum -= dayofmonth[i];
        if(daynum==0){
            month = i;
            day = dayofmonth[i];
            break;
        }
        else if(daynum<0){
            month = i;
            day = daynum + dayofmonth[i];
            break;
        }
    }
    }
    if(month>=10&&day>=10){
        printf("%d-%d-%d\n", year,month,day);
    }
    if(month<10&&day>=10){
        printf("%d-0%d-%d\n", year,month,day);
    }
    if(month>=10&&day<10){
        printf("%d-%d-0%d\n", year,month,day);
    }
    if(month<10&&day<10){
        printf("%d-0%d-0%d\n", year,month,day);
    }

}
int main(){ 
    int year;
    int daynum;
    while(scanf("%d%d", &year,&daynum)!=EOF){
        find( year,  daynum);
    }
}

第六题是日期累加,我的方法不太好,答案是一天一天加,加n天。

#include <stdio.h>
using namespace std;
void daynum(int year, int month, int day, int num) {
    int dayofmouth[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) dayofmouth[2] = 29;

    day = day + num;
    while (day > dayofmouth[month]) {
        day -= dayofmouth[month];
        month++;
        if (month > 12) {
            year++;
            month = 1;
            if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) dayofmouth[2] = 29;
            else dayofmouth[2] = 28;
        }
    }
    printf("%04d-%02d-%02d\n", year, month, day);
}

int main() {
    int n;
    scanf("%d", &n);
    int year, month, day, num;
    for (int i = 0; i < n; i++) {
        scanf("%d%d%d%d", &year, &month, &day, &num);
        daynum(year, month,  day,  num);
    }

}

第七题是日期差值,还是一个日期一个日期加。

#include <stdio.h>
using namespace std;
void nextday(int& year, int& month, int& day) { //日期加一
    int dayofmonth[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
        dayofmonth[2] = 29;
    }
    day++;
    if (day > dayofmonth[month]) {
        day = 1;
        month++;
    }
    if (month > 12) {
        year++;
        month = 1;
    }
}
int main() {
    int a, b;
    while (scanf("%d%d", &a, &b) != EOF) {
        int year, month, day;
        int year1, month1, day1;
        int year2, month2, day2;
        year1 = a / 10000;
        month1 = (a % 10000) / 100;
        day1 = a % 100;
        year2 = b / 10000;
        month2 = (b % 10000) / 100;
        day2 = b % 100;
        int n = 0;
        if (a < b) {
            year = year1;
            month = month1;
            day = day1;
            while (1) {
                nextday(year, month, day);
                n++;
                if (year == year2 && month == month2 && day == day2) {
                    printf("%d\n", n+1);
                    break;
                }
            }

        } else if (a > b) {
            year = year2;
            month = month2;
            day = day2;
            while (1) {
                nextday(year, month, day);
                n++;
                if (year == year1 && month == month1 && day == day1) {
                    printf("%d\n", n+1);
                    break;
                }
            }
        }
        else {printf("0");}
    }
}

相关文章:

  • [MySQL] MySQL复合查询(多表查询、子查询)
  • 各种传参形式
  • C++/C 编程宝典:掌握指针数组与数组指针的关键区别
  • PHP学习
  • SFP+(Enhanced Small Form-factor Pluggable)详解
  • 在Pycharm中将ui文件修改为py文件
  • Code Review 是一场不断完善自己修行
  • 晋升系列3:面评技巧
  • 【爬虫基础】第二部分 爬虫基础理论 P3/3
  • EA SPORTS FC 25 2000+ 大型MOD整合包
  • 数据库操作与数据管理——Rust 与 SQLite 的集成
  • Python 数据结构 4.单向链表
  • 测试人员如何驱动开发?
  • 【踩坑随笔】`npm list axios echarts`查看npm依赖包报错
  • ZYNQ-PL实践课堂(三)IP核之MMCM/PLL
  • Android Coil3配置Application单例ImageLoader,Kotlin
  • 【再谈设计模式】备忘录模式~对象状态的守护者
  • iOS实现一个强大的本地状态记录容器
  • 自定义类型:联合和枚举
  • 虚拟现实与增强现实:DeepSeek在沉浸式体验中的创新应用
  • 网站文字配色/win10优化软件
  • 官方静态网站模板/seo作弊
  • 企业网站建设中存在的主要问题会有哪些?/seo需求
  • 南宁模板建站哪家好/英语seo
  • 闽清网站建设/常用的seo工具
  • 如何用jsp做简单的网站/种子库