目录
试题 A: 组队
试题 B: 年号字串
试题 C: 数列求值
试题 D: 数的分解
试题 E: 迷宫
试题 F: 特别数的和
试题 G:完全二叉树的权值
试题 H:等差数列
试题 I:后缀表达式(不一定对)
试题 J:灵能传输(不会)
试题 A: 组队
答案:490
试题 B: 年号字串
#include <bits/stdc++.h>using namespace std;int main(){//26进制数 int n;cin>>n;string s = "111";for(int i = s.length() - 1;i >=0;i--){s[i] = 'A' - 1 + n % 26;n /= 26;}cout<<s<<endl;return 0;}
试题 C: 数列求值
#include <bits/stdc++.h>using namespace std;int main(){int a1=1,a2=1,a3=1,ans=0;for(int i = 4;i <= 20190324;i++){ans = (a3 + a2 + a1) % 10000;a1 = a2;a2 = a3;a3 = ans;}cout<<ans<<endl;return 0;}
试题 D: 数的分解
#include <bits/stdc++.h>using namespace std;bool judge(int n){int t;while(n > 0){t = n % 10;if(t == 2 || t == 4) return false;n /= 10;}return true;}int main(){int ans = 0;for(int a = 1;a < 2019;a++){if(!judge(a)) continue;for(int b = a + 1;b < 2019 - a - b;b++){if(judge(b) && judge(2019 - a - b)) ans++;}}cout<<ans<<endl;return 0;}
试题 E: 迷宫
#include<bits/stdc++.h>using namespace std;int mapp[502][502],vis[502][502],n,m,maxn;int dir[4][2]={1,0,0,-1,0,1,-1,0};char di[4]={'D','L','R','U'};string str1;struct node{int x,y,num;string str;};void bfs(int x,int y,string str,int num){queue<node> que;node aa;aa.x=x;aa.y=y;aa.str=str;aa.num=num;que.push(aa); vis[1][1]=1;while(!que.empty()){node no=que.front();que.pop();//cout<<no.x<<" "<<no.y<<" "<<no.num<<" "<<no.str<<endl;if(no.x==n&&no.y==m) { maxn=no.num; str1=no.str; break; }for(int i=0;i<4;i++){ int xx=dir[i][0]+no.x; int yy=dir[i][1]+no.y; if(xx<=n&&xx>=1&&yy<=m&&yy>=1) if(!mapp[xx][yy]) if(!vis[xx][yy]) { vis[xx][yy]=1;no.str.push_back(di[i]); node a; a.x=xx; a.y=yy; a.str=no.str; a.num=no.num+1; //cout<<a.x<<" "<<a.y<<" "<<a.num<<" "<<a.str<<endl; que.push(a); no.str.erase(no.str.size()-1); }}}}int main(){cin>>n>>m;string str;for(int i=1;i<=n;i++) { char c; c=getchar(); for(int j=1;j<=m;j++) { c=getchar(); mapp[i][j]=c-'0';} } maxn=99999999; bfs(1,1,str,0); cout<<maxn<<endl<<str1;return 0; }
试题 F: 特别数的和
#include <bits/stdc++.h>using namespace std;int sum;bool judge(int n){int t = 0;while(n > 0){t = n % 10;if(t == 0 || t == 1 || t == 2 || t == 9)return true;n /= 10;}return false;}int main(){int n;cin>>n;for(int i = 1;i <= n;i++){if(judge(i)) sum += i;}cout<<sum<<endl;return 0;}
试题 G:完全二叉树的权值
#include <bits/stdc++.h>using namespace std;int arr[10000];int sum[10000];int n;int main(){cin>>n;for(int i = 1;i <= n;i++)cin>>arr[i];int num = 1;for(int i = 1;i <= n;i++){if(i >= pow(2,num)) num++;sum[num] += arr[i];}int max = sum[1];int flag = 1;for(int i = 1;i <= n;i++){if(sum[i] > max){max = sum[i];flag = i;}}cout<<flag<<endl;return 0;}
试题 H:等差数列
#include <bits/stdc++.h>using namespace std;int arr[100000+10];int main(){int n;cin>>n;for(int i = 1;i <= n;i++)cin>>arr[i];//1、先排序sort(arr+1,arr+n+1,less<int>());//2、找到相邻两个数字的最小差int m = arr[n];for(int i = 2;i <= n;i++) if(arr[i] - arr[i-1] < m) m = arr[i] - arr[i-1];//3、(最大值 - 最小值) / 最小差 + 1//cout<<arr[1]<<"---"<<arr[n]<<endl; int ans = (arr[n] - arr[1]) / m + 1;cout<<ans<<endl; return 0;}
试题 I:后缀表达式(不一定对)
#include <bits/stdc++.h>using namespace std;int arr[100000+10];long long ans;int main(){int n,m;cin>>n>>m;int len = n + m + 1;for(int i = 1;i <= len;i++)cin>>arr[i];//1、排序sort(arr+1,arr+n+m+2,less<int>());//2、累加,先减负数,在加for(int i = 1;i <= len;i++){if(m-- > 0) ans -= arr[i];else ans += arr[i];} cout<<ans<<endl;return 0;}