目录
试题 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;
}