求职完美世界的同学可以加入完美世界的交流群:560623349,供大家在此交流后续面试及职位信息。
互联网C++
简单弹球游戏:
建立二位坐标系,模拟球的运动,算出坐标
#include <stdio.h>
void ball(int w, int h, int x, int n)
{
int y = 0;
int vx = 1, vy = 1;
while(n > 0) {
x += vx;
y += vy;
if (x >= w || x <= 0) {
vx = -vx;
}
if (y >= h || y <= 0) {
vy = -vy;
}
if (y <= 0) {
printf("%d ", x);
--n;
}
}
printf("\n");
}
int main()
{
int w, h, x, n;
while(scanf("%d%d%d%d", &w, &h, &x, &n) != EOF) {
ball(w, h, x, n);
}
}
时间转换小工具:
按照题意推公式计算
#include <stdio.h>
#include <stdlib.h>
int get_time(int *, int *, int *, int const);
int checkData(int, int, int);
int main(int argc, const char * argv[]) {
int hour, min, second, time_diff_second;
while (scanf("%d:%d:%d,%d", &hour, &min, &second, &time_diff_second) != EOF) {
get_time(&hour, &min, &second, time_diff_second);
printf("%02d %02d %02d\n", hour, min, second);
}
return 0;
}
int checkData(int h, int m, int s)
{
int ret = 0;
if (h < 0
|| h > 23)
{
ret = -1;
}
else if (m < 0
|| m > 59)
{
ret = -2;
}
else if (s < 0
|| s > 59)
{
ret = -3;
}
return ret;
}
int get_time(int *hour, int *min, int *second, int const time_diff_second)
{
int ret = 0;
int h = *hour, m = *min, s = *second;
ret = checkData(h, m, s);
if (ret != 0) {
return ret;
}
int a_min_second = 60;
int an_hour_second = 60 * a_min_second;
int a_day_second = 24 * an_hour_second;
int hour_second = h * an_hour_second;
int min_second = m * a_min_second;
int total_second = hour_second + min_second + s;
int trans_second = total_second + time_diff_second;
s = trans_second < 0 ? a_day_second - abs(trans_second % a_day_second) : trans_second;
h = (int)(s / an_hour_second);
s = s - (h * an_hour_second);
m = (int)(s / a_min_second);
s = s - (m * a_min_second);
*hour = h >= 24 ? h % 24 : h;
*min = m;
*second = s;
return ret;
}
互联网Java
年会游戏:
典型的背包问题,用动态规划求解
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
int vale[] = new int[num];
int weight[] = new int[num];
for (int i = 0; i < num; i++) {
vale[i] = scanner.nextInt();
}
for (int i = 0; i < num; i++) {
weight[i] = scanner.nextInt();
}
int totleWight = scanner.nextInt();
System.out.println(knapsack(vale, weight, totleWight));
}
public static int knapsack(int val[], int wt[], int W) {
int N = wt.length;
int[][] V = new int[N + 1][W + 1];
for (int col = 0; col <= W; col++) {
V[0][col] = 0;
}
for (int row = 0; row <= N; row++) {
V[row][0] = 0;
}
for (int item = 1; item <= N; item++) {
for (int weight = 1; weight <= W; weight++) {
if (wt[item - 1] <= weight) {
V[item][weight] = Math.max(val[item - 1] + V[item - 1][weight - wt[item - 1]], V[item - 1][weight]);
} else {
V[item][weight] = V[item - 1][weight];
}
}
}
return V[N][W];
}
}
爸爸去哪儿:
依然是背包问题变形,使用动态规划算法
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner reader=new Scanner(System.in);
int x=reader.nextInt();
int[] array=new int[x];
for(int i=0;i<x;i++){
array[i]=reader.nextInt();
}
int y=reader.nextInt();
System.out.println(minCoins(array,y));
}
public static int minCoins(int[] arr,int aim){
if(arr==null||arr.length==0||aim<0){
return -1;
}
int n=arr.length;
int max=Integer.MAX_VALUE;
int[][] dp=new int[n][aim+1];
for(int j=1;j<=aim;j++){
dp[0][j]=max;
if(j-arr[0]>=0&&dp[0][j-arr[0]]!=max){
dp[0][j]=dp[0][j-arr[0]]+1;
}
}
int left=0;
for(int i=1;i<n;i++){
for(int j=1;j<=aim;j++){
left=max;
if(j-arr[i]>=0&&dp[i][j-arr[i]]!=max){
left=dp[i][j-arr[i]]+1;
}
dp[i][j]=Math.min(left,dp[i-1][j]);
}
}
return dp[n-1][aim]!=max?dp[n-1][aim]:-1;
}
}
游戏C++
破解电报:
本题类似括号匹配检测,读取字符串之后用栈处理。
#include <iostream>
#include <map>
#include <string>
#include <stack>
using namespace std;
bool isValid(string s) {
stack<char> temp;
map<char, char> m; m['&']='@',m['^']='#',m['%']='$';
for (int i = 0; i < s.size(); i++) {
if (s[i] == '@' || s[i] == '#' || s[i] == '$')
temp.push(s[i]);
else if (s[i] == '&' || s[i] == '^' || s[i] == '%')
{
if (temp.empty()||temp.top() != m[s[i]]) return false;
else temp.pop();
}
}
return temp.empty();
}
int main(int argc, char* argv[])
{
string temp;
cin >>temp;
if(isValid(temp))
cout << "true" << endl;
else
cout << "false" << endl;
return 0;
}
收集卡片游戏:
把数据读取,排序,去重后输出即可
#include <iostream>
#include <set>
#include <list>
using namespace std;
int main()
{
set<int> v1;
set<int> v2;
int nID = -1;
bool bChange = false;
while (cin>>nID)
{
if (nID == 0)
{
if ( !bChange )
{
bChange = true;
continue;
}
else
{
break;
}
}
if (!bChange)
{
v1.insert(nID);
}
else
{
v2.insert(nID);
}
}
list<int> v3;
for (auto it : v1)
{
v3.push_back(it);
}
for ( auto it : v2)
{
if (v1.find(it) == v1.end())
{
v3.push_back(it);
}
}
v3.sort();
for (auto it : v3)
{
cout << it << " ";
}
return 0;
}
游戏Java
贪吃鬼小R:
可以直接他每天吃掉的巧克力数量列出递推公式,由此计算出答案
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int day = scanner.nextInt();
long chocolate = 1;
int moreEat = 3;
for (int i = day - 1; i > 0; i--) {
chocolate = 2 * (chocolate + moreEat);
}
System.out.println(chocolate);
}
}
}
24点游戏:
暴力枚举4个数之间所有可能的计算,注意除法运算时用浮点数保存结果。
import java.util.LinkedHashMap;
import java.util.Map;
public class Main {
static Map<Long, Long> rankMap = new LinkedHashMap<>();
static double wucha = 1E-6;
static double num[] = new double[4];
static boolean flag;
public static void main(String[] args) {
java.util.Scanner scanner = new java.util.Scanner(System.in);
while(scanner.hasNextInt()) {
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = scanner.nextInt();
int d = scanner.nextInt();
can24(a, b, c, d);
}
}
public static void game24(int n) {
if (n == 1) {
if (Math.abs(num[0] - 24) <= wucha) {
flag = true;
return;
}
}
if (flag)
return;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
double a, b;
a = num[i];
b = num[j];
num[j] = num[n - 1];
num[i] = a + b;
game24(n - 1);
num[i] = a - b;
game24(n - 1);
num[i] = b - a;
game24(n - 1);
num[i] = a * b;
game24(n - 1);
if (b != 0) {
num[i] = a / b;
game24(n - 1);
}
if (a != 0) {
num[i] = b / a;
game24(n - 1);
}
num[i] = a;
num[j] = b;
}
}
}
public static void can24(int a, int b, int c, int d) {
num[0] = (double) (a);
num[1] = (double) (b);
num[2] = (double) (c);
num[3] = (double) (d);
flag = false;
game24(4);
if (flag)
System.out.print("yes");
else
System.out.print("no");
}
}
以上思路供同学们参考,也希望同学们分享自己的思路。
求职完美世界的同学可以加入完美世界的交流群:560623349,供大家在此交流后续面试及职位信息。