华为机考真题,本人只会JS,故只能用JS语言编写,有会的小伙伴们用JS编写一下代码,并且能够顺利运行,感谢感谢!
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define fi first
#define se second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define IOS ios::sync_with_stdio(false),cin.tie(0)
void Print(int *a,int n){
for(int i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d\n",a[n]);
}
struct node{
int a[3];
bool operator != (node b)const{
for(int i=0;i<3;i++) if(a[i]!=b.a[i]) return true;
return false;
}
}A,B;
int tmp;
node fun(node A,int k){
int d1=A.a[1]-A.a[0],d2=A.a[2]-A.a[1];
if(d1==d2) return A;
else if(d1<d2){
int t=min(k,(d2-1)/d1);
k-=t;
tmp+=t;
A.a[0]+=t*d1,A.a[1]+=t*d1;
}
else {
int t=min(k,(d1-1)/d2);
k-=t;
tmp+=t;
A.a[1]-=t*d2,A.a[2]-=t*d2;
}
if(k) return fun(A,k);
else return A;
}
int main(){
for(int i=0;i<3;i++) scanf("%d",&A.a[i]);
for(int i=0;i<3;i++) scanf("%d",&B.a[i]);
sort(A.a,A.a+3);
sort(B.a,B.a+3);
int dep1=0,dep2=0;
node na=fun(A,inf);dep1=tmp,tmp=0;
node nb=fun(B,inf);dep2=tmp,tmp=0;
if(na!=nb) return puts("NO"),0;
if(dep1>dep2){
swap(dep1,dep2);
swap(A,B);
}
int ans=dep2-dep1;
B=fun(B,ans);
int l=0,r=dep1;
while(l<r){
int m=l+r>>1;
if(fun(A,m)!=fun(B,m)) l=m+1;
else r=m;
}
ans+=(l<<1);
puts("YES");
printf("%d\n",ans);
return 0;
}
最好不要在CSDN求代码
在线考试在这里求代码...是不是慢了点
C站解题没这么快奥,我看你6号提问到九号才有代码相关回答。
你会吗?
这题有点意思
自己动手,丰衣足食
这里求不到代码
下次碰到这种考试,你应该提前请你的同学朋友,在旁边候着。csdn答题的速度,没有你想象中那么快。
这是按照规则做替换啊 现在还需要吗
这种在线考试的最好提前安排好分工,有内场有外场,哈哈.现在 考完了吧?
这里求不了答案,如果比较急的话建议上外包网站把任务外包,雇人解答
习题吗还是
机考2小时早完了哇
题目上写的C++、C,用js语言符合邀请嘛?
转为迷宫问题就好理解了,
然后用递归,
假设当前位置i,j,则相对以下8个方向查询,四周八方向都==0,即没有棋子,则退回
a[i-1][j]
a[i-1][j-1]
a[i-1][j+1]
a[i][j-1]
a[i][j+1]
a[i+1][j]
a[i+1][j-1]
a[i+1][j+1]
结束条件如下,然后输出路径。
i==指定x
j==指定y
这个问题的难点在于 棋子的位置
设原棋子位置为a,b 目标棋子为m,n 判断m-a n-b是否为2的倍数,若为2的倍数者继续,否则退出返回0;再判断棋子周围是否有棋子,对八个方位判断,有棋子则将位置移动,判断移动后的位置是否为目标位置,如不是再次判断棋子走位七个方位是否有棋子(去除原棋子方位),有棋子后在再次移动,知道到达目标位置,然后返回移动次数 while(m==a&&n==b){移动次数标志++ 移动棋子 。。。}
这种在线考试,在这里提问题,很少能够及时得到答案的啊
下次还是打电话吧
现在应该过了考试时间了吧,下次遇到这种问题先自己写吧,然后不会的再找,
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define fi first
#define se second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define IOS ios::sync_with_stdio(false),cin.tie(0)
void Print(int *a,int n){
for(int i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d\n",a[n]);
}
struct node{
int a[3];
bool operator != (node b)const{
for(int i=0;i<3;i++) if(a[i]!=b.a[i]) return true;
return false;
}
}A,B;
int tmp;
node fun(node A,int k){
int d1=A.a[1]-A.a[0],d2=A.a[2]-A.a[1];
if(d1==d2) return A;
else if(d1<d2){
int t=min(k,(d2-1)/d1);
k-=t;
tmp+=t;
A.a[0]+=t*d1,A.a[1]+=t*d1;
}
else {
int t=min(k,(d1-1)/d2);
k-=t;
tmp+=t;
A.a[1]-=t*d2,A.a[2]-=t*d2;
}
if(k) return fun(A,k);
else return A;
}
int main(){
for(int i=0;i<3;i++) scanf("%d",&A.a[i]);
for(int i=0;i<3;i++) scanf("%d",&B.a[i]);
sort(A.a,A.a+3);
sort(B.a,B.a+3);
int dep1=0,dep2=0;
node na=fun(A,inf);dep1=tmp,tmp=0;
node nb=fun(B,inf);dep2=tmp,tmp=0;
if(na!=nb) return puts("NO"),0;
if(dep1>dep2){
swap(dep1,dep2);
swap(A,B);
}
int ans=dep2-dep1;
B=fun(B,ans);
int l=0,r=dep1;
while(l<r){
int m=l+r>>1;
if(fun(A,m)!=fun(B,m)) l=m+1;
else r=m;
}
ans+=(l<<1);
puts("YES");
printf("%d\n",ans);
return 0;
}