主页 > 软件开发  > 

机试准备第六天

机试准备第六天

第一题是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");} } }

标签:

机试准备第六天由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“机试准备第六天