填空题
第一题:
问题描述
小蓝要在屏幕上放置一行文字,每个字的宽度相同。
小蓝发现,如果每个字的宽为 36 像素,一行正好放下 30 个字,字符之间和前后都没有任何空隙。
请问,如果每个字宽为 10 像素,字符之间不包含空隙,一行可以放下多少个字?36 * 30 / 10
答案:108
第二题:
答案:608
第三题:
代码:
#include<bits/stdc++.h> #define LL long long int using namespace std; int n,maxn=0; int clac(int m) { int num = 0; for(int i=1;i<=m;i++) if(m % i == 0) num ++; return num; } int main(){ for(int i=0;i<36;i++) { cin >> n; maxn = clac(maxn)<clac(n)?n:maxn; } cout << maxn << endl; return 0; }
答案:901440
第四题:
代码:
#include<bits/stdc++.h> #define LL long long int using namespace std; int n,maxn=0; bool calc(int m) { int a=0,b=0; int mb=m; while(m) { a += m % 2; m /= 2; } while(mb) { b += mb % 8; mb /= 8; } return a==b; } int main(){ int n = 0; int i=1; while(n < 23) { if(calc(i)) n ++; i ++; } cout << --i << endl; return 0; }
答案:4169
第五题:
代码:
#include<bits/stdc++.h> #define LL long long int using namespace std; const int N = 1001; int mp[N][N]; int dx[4] = {0,0,1,-1}; int dy[4] = {1,-1,0,0}; int n=30, m=40; int dfs(int x, int y) { if(mp[x][y] == 2) return 1; mp[x][y] = 2; for(int i=0;i<4;i++) { int nx = x + dx[i]; int ny = y + dy[i]; if(nx > 0 && nx <= n && ny > 0 && ny <= m && mp[nx][ny]==0) dfs(nx,ny); } } int main(){ for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin >> mp[i][j]; dfs(1, 1); int res = 0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(mp[i][j] == 2) res ++; cout << res << endl; return 0; }
答案:541
编程题
第六题:
代码:
#include<bits/stdc++.h> #define LL long long int using namespace std; int main(){ int n; cin >> n; cout << n%100000*10 + n/100000 << endl; return 0; }
第七题:
代码:
#include<bits/stdc++.h> #define LL long long int using namespace std; int main(){ string str; cin >> str; int i = str.length(); for(i;i>=0;i--) if(str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' || str[i] == 'u'){ cout << str[i] << endl; break; } return 0; }
第八题:
代码:
#include<bits/stdc++.h> #define LL long long int using namespace std; int main(){ LL n; cin >> n; while(n >= 10){ LL num = 1; while(n) { if(n % 10 != 0) num *= n % 10; n /= 10; } cout << num << endl; n = num; } return 0; }
第九题:
代码:
#include<bits/stdc++.h> #define LL long long int using namespace std; const int N = 1001; int mp[N][N]; int vis[N][N]; int dx[4] = {0,0,1,-1}; int dy[4] = {1,-1,0,0}; int n, m; int res = 0; int calc(int x, int y) { int max = x>y?x:y; int min = x<y?x:y; if(min==0) return 0; int yu=max%min; while(yu != 0){ max = min; min = yu; yu = max % min; } if(min > 1) return 1; return 0; } bool t(int x,int y){ int num=0; if(calc(mp[x][y],mp[x][y+1])) num++; if(calc(mp[x][y],mp[x][y-1])) num++; if(calc(mp[x][y],mp[x+1][y])) num++; if(calc(mp[x][y],mp[x-1][y])) num++; if(num > 0) return 1; return 0; } int dfs(int x, int y) { if(!t(x,y)) return 1; for(int i=0;i<4;i++) { int nx = x + dx[i]; int ny = y + dy[i]; if(nx > 0 && nx <= n && ny > 0 && ny <= m && vis[nx][ny]==0 && calc(mp[nx][ny],mp[x][y])) { res ++; vis[nx][ny] = 1; dfs(nx,ny); vis[nx][ny] = 0; } } } int main(){ cin >> n >> m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin >> mp[i][j]; int x, y; cin >> x >> y; dfs(x, y); cout << res << endl; return 0; }
第十题:
说明:本题个人采用暴力枚举,可能会超时
正确解题可以采用滑动窗口或前缀和等
代码:
#include<bits/stdc++.h> #define LL long long int using namespace std; const int N = 100001; int fn[N]; int n, k; int main(){ cin >> n >> k; for(int i=0;i<n;i++) cin >> fn[i]; int maxn = 0; for(int i=0;i<n-k+1;i++) { int num = 0; for(int j=i;j<i+k;j++) num += fn[j]; maxn = maxn<num?num:maxn; } cout << maxn << endl; return 0; }
以上只是我个人的代码,代码写法比较普通易懂,有什么建议或者大家如果有发现错误的,可以在下面评论区中指出,请大家多多支持,感谢~💪💪💪。