大疆后台工程师笔试 三个题全A,今天给我感谢信
三个题全A,今天给我感谢信 ,我是没想到的,很气!!!!
第一题:删除字符问题
#include "bits/stdc++.h"
using namespace std;
int main(){
string str;
int k;
while(cin>>str){
scanf("%d", &k);
int n = str.length();
for(int i = 0; i < k; i++){
bool flag = false;
n = str.length();
for(int j = 1; j < n; j++){
char a = str[j -1];
char b = str[j];
if(a > b){
flag = true;
if(j == 1){
str = str.substr(j,n-j);
}
else{
str = str.substr(0,j-1) + str.substr(j,n-j);
}
break;
}
if(j == n - 1 && ! flag){
str = str.substr(0,n-1);
}
}
}
int index = 0;
for(int i=0;i<str.length();i++){
if(str[i] !='0'){
index = i;
break;
}
}
str = str.substr(index,str.length() - index);// 去掉 0000013456这样的数字的。
int zeoNm = 0;
for(int i = 0;i < str.length(); i++){
if(str[i] == '0'){
zeoNm ++;
}
}// 判断是不是全都是0的数字,如果是那就输出0
if(zeoNm == str.length()){
cout<<"0\n";
} else{
cout<<str<<"\n";
}
}
return 0;
} 第二题: 0 1 背包问题
#include<iostream>
using namespace std;
#define V 1500
unsigned int f[V];//全局变量,自动初始化为0
unsigned int weight[10];
unsigned int value[10];
#define max(x,y) (x)>(y)?(x):(y)
int main()
{
int N,M;
cin>>N;//物品个数
cin>>M;//背包容量
for (int i=1;i<=N; i++)
{
cin>>weight[i]>>value[i];
}
for (int i=1; i<=N; i++)
for (int j=M; j>=1; j--)
//不是倒着 就会出现一个一个物品被装了多次的情况的
{
if (weight[i]<=j)
{
f[j]=max(f[j],f[j-weight[i]]+value[i]);
}
}
cout<<f[M]<<endl;//输出最优解
} 第三题:迪杰斯特拉最短路径问题 #include "iostream"
#include "algorithm"
#include "bits/stdc++.h"
const int inf = 1 << 30;
using namespace std;
int w[202][202];//权重数值的存储结果
bool vis[205]; //
int d[205];// 存储距离
using namespace std;
int dij(int n, int from, int to){
memset(vis, 0,sizeof(vis));//把 vis初始化为0;
for(int i = 0 ;i < n; i++ ){
d[i] = (i == from ? 0 : inf);//除了起点 其余设置成为无穷大的
}
for(int i = 0; i < n; i++){
int x = inf;
int minx = inf;
for(int y = 0; y < n; y++){
if(!vis[y] && d[y] <= minx){//没被访问过,并且小于最小的值
minx = d[y];
x = y;
}
}
vis[x] = 1;// x要被访问 设置成 1
for(int y = 0; y < n; y++){
d[y] = min(d[y], d[x] + w[x][y]);
}
}
return d[to];
}
int main(){
int n,p,x;
//cout<<inf; //1073741824
while(scanf("%d%d", &n, &p) != EOF){
int from, to, weight;
for(int i = 0;i < n; i++){
for(int j = 0;j < n; j++){
w[i][j] = inf;
}
}
for(int i=0;i<p;i++){
cin>>from>>to>>weight;
if(weight< w[from][to] || weight < w[to][from]){
w[from][to] = w[to][from] = weight;
}
}
cin>>x;
int ans = dij(n,0,x);
cout<<ans<<endl;
}
return 0;
} 
小天才公司福利 1182人发布