8.25完美世界游戏开发Java(AK
第一题
猴子吃桃问题,每一天吃一半多一个,已知n天后剩余1个,问初始值。
例如:输入2 则初始值为10. 10 第一天吃一半 5 + 1个,剩余4个,第二天吃一半2+1个 剩余1个;
//直接递归即可 if(n == 0) return 1; return (calNum(n - 1) + 1) * 2;
第二题
给定一个方格。90*90 以原点为中心。 平均分成9个小宫格,大概如图所示吧
然后给你一个圆的圆心(保证圆心在整个大正方形内部)和半径,询问这个圆覆盖了几个小正方形。
我瞎做的,跑每个小正方形的每个整数点,判断该点到圆心与半径的大小关系,如该点到圆心距离小于半径则认为覆盖了。
static int calSquareNum(double x, double y, double r) {
int[] pointX = new int[]{0, 30, 60, 90};
int[] pointY = new int[]{0, 30, 60, 90};
int ans = 0;
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
demo:
for(int X = pointX[i]; X <= pointX[i + 1]; X++){
for(int Y = pointY[j]; Y <= pointY[j + 1]; Y++){
if(Math.sqrt((Math.pow(X - x, 2)) + Math.pow(Y - y, 2)) < r){
ans++;
break demo;
}
}
}
}
}
return ans;
}
第三题
给定两个数组,一个为入栈序列,一个为出栈序列。询问这个出栈序列是否合法。
直接模拟即可。就顺序读取入栈序列判断是否满足,不满足则入栈。
static boolean isValidPop(int[] push, int[] pop) {
Stack<Integer> left = new Stack<>();
boolean flag = true;
int index = 0;
for(int i = 0; i < pop.length; i++){
if(!left.isEmpty() && left.peek() == pop[i]){
left.pop();
continue;
}
if(index < push.length && push[index] == pop[i]){
index++;
continue;
}
boolean fflag = true;
while(index < push.length){
if(pop[i] == push[index]){
index++;
fflag = false;
break;
} else {
left.add(push[index++]);
}
}
if(fflag){
flag = false;
break;
}
}
return flag;
}
第四题
给定一个数组,全排列这个数组,求满足相邻两位的是可以开方的个数。
因为C++的STL内置了全排列 所以偷懒直接用C++写了。
#include <bits/stdc++.h>
using namespace std;
int a[100010];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
int ans = 0;
cin >> n;
for(int i = 0; i < n; i++){
cin >> a[i];
}
sort(a, a + n);
do{
bool flag = true;
for(int i = 1; i < n; i++){
int val = a[i] + a[i - 1];
int tmpVal = sqrt(val);
if(val != tmpVal * tmpVal){
flag = false;
break;
}
}
if(flag){
ans++;
}
}while(next_permutation(a, a + n));
cout << ans << endl;
return 0;
}
游戏体验良好2233333
#笔经##笔试题目#
凡岛公司福利 528人发布
