目录@TOC
笔试记录0820
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
huawei0820题目3
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
//时间记录:20200820【20:30-21:00;22:40-24:00】共计约两小时。。。考试时间内也就完后一道题目的水平了...
//问题记录:常用的功能块要记熟练,闭卷。
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char framein[100] = {
0
};
char brickin[100] = {
0
};
int len_frame;
int len_brick;
//输入
gets(framein);
gets(brickin);
len_frame = strlen(framein)-1;
len_brick = strlen(brickin)-1;
printf("Length_frame: %d\n", len_frame);
printf("Length_brick: %d\n", len_brick);
//输入的字符串转化为整型数组
int frame[len_frame];
int brick[len_brick];
printf(" framenum= ");
for(int i = 0; i < len_frame; i++) {
frame[i] = framein[i]-'0';
printf(" %d ", frame[i]);
}
printf(" \nbricknum= ");
for(int i = 0; i < len_brick; i++) {
brick[i] = brickin[i]-'0';
printf(" %d ", brick[i]);
}
//遍历准备
int cacutimes = len_frame-len_brick+1;
int leftnum[cacutimes];
int len_add;
int add[len_frame];
len_add = len_frame;
printf("\n leftnum0= ");
for(int i = 0; i < cacutimes; i++) {
leftnum[i] = 0;
printf(" %d ", leftnum[i]);
}
//进入遍历,从第一个开始到边界,依次对齐遍历计算,每次记录当前的未消行数。
for (int i = 0; i < cacutimes; i++) {
printf("\n第%d种方案:", i);
printf(" \nadd0= ");
for(int i = 0; i < len_frame; i++) {
add[i] = frame[i];
printf(" %d ", add[i]);
}
//当前方案[brick第1列对其frame第i列]得到新的add数组
printf("\nadd=");
for(int j = 0; j < len_brick; j++) {
add[i+j] = add[i+j] +brick[j];
}
for (int i = 0; i < len_add; i++) {
printf(" %d ", add[i]);
}
//判断是否可以消去,并消去
int add_multi = 1;
for(int j = 0; j < len_add; j++) {
add_multi = add_multi*add[j];
}
int one[len_add];
for (int i = 0; i < len_add; i++) {
one[i] = 1;
}
while(add_multi != 0) {
printf("\n一次消去ing add=");
for (int i = 0; i < len_add; i++) {
add[i] = add[i]-one[i];
printf(" %d ", add[i]);
}
printf("\n一次消去done");
for(int j = 0; j < len_add; j++) {
add_multi = add_multi*add[j];
}
printf("\n检查当前消去结果:零存在检验乘积add_multi=%d", add_multi);
}
//消去后的add结果求取最大值
printf("\n本次全部消去后取剩余最大值leftnum[i]:");
int addmax = 0;
for(int j = 0; j < len_add; j++) {
if (add[j] >= addmax)addmax = add[j];
}
leftnum[i] = addmax;
printf(" %d ", leftnum[i]);
}
printf("\n所有移动情况的消去结果leftnum[i]:\n");
for (int i = 0; i < cacutimes; i++) {
printf(" %d ", leftnum[i]);
}
return 0;
}