网易雷火4.23笔试,做了数独和hp题,剩下两个不会。。
第一题,让判断六宫格数独是否合理,其实就判断行/列/宫是否有重复
#include <bits/stdc++.h>
using namespace std;
/*数独
判断行是否重复
判断列是否重复
判断宫是否重复
*/
int arr[6][6];
int main(){
int n=0;
scanf("%d",&n);
int cnt=0;
while(n--){
for(int i=0;i<6;i++){
int temp=0;
cin>>temp;
for(int j=5;j>=0;j--){
while(temp){
arr[i][j]=temp%10;
temp = temp/10;
}
}
}
//判断是否合法
for(int i=0;i<6;i++){
for(int j=0;j<6;j++){
//检查本列
for(int col=j;col<6;col++){
if(arr[i][j]==arr[i][col])
break;
}
//检查本行
for(int row=i;row<6;row++){
if(arr[i][j]==arr[row][j])
break;
}
//检查本宫
for(int k=0;k<6;k++){
if(arr[i][j]==arr[(i/2)*3+k/3][(j/3)*2+k%3])
break;
}
}
}
cnt++;
}
cout<<cnt<<endl;
} 第二题,是放技能,原始hp达到[lowerHp,upperHp]就算boos进入虚弱状态,主角有n个技能,第i个技能的伤害值是Di,而且Di是升序排列
所以我们肯定先放大招,大招放过了,打得hp比lowerHp还低那肯定不行,换一个小点的招,如果还不行,说明最小的技能也会导致boss直接掉血到lowerHp下,即题目说的boss无法进入虚弱状态,回0即可
#include <bits/stdc++.h>
using namespace std;
/*
动态规划
base case:hp在[lowerHp,upperHp]之间时则可以返回
状态:hp
选择:每选择一种技能,就减少了hp,所以所有技能的伤害值就是选择
dp函数的定义:参数=状态,返回值=最少攻击次数
∴ dp(hp)表示,输入一个hp,返回达到hp下降至区间所需的最少攻击次数
其实这个题应该动规做挺好的,但是我没想出来。。。
*/
int main(){
int m;
cin>>m;
while(m--){
int hp=0,upperHp=0,lowerHp=0,n;
cin>>hp>>lowerHp>>upperHp>>n;
int arr[n];
for(int i=0;i<n;i++){
int t=0;
cin>>t;
arr[i]=t;
}
int cnt=0;
while(hp>upperHp){
for(int i=n-1;i>=0;i--){//从大招放起
if(hp-arr[i]<lowerHp){
continue;//差值较小,换一个小点的伤害
}
hp -= arr[i];
cnt++;
}
}
if(hp<=upperHp && hp>=lowerHp){
cout<<cnt<<endl;
}
if(hp<lowerHp) cout<<"0";
}
} 第三题卡在了字符串的某几个位置子串从十六进制转变成整数或字符串上,主要是没想出来怎么选择rpc命令的子串位置,时间和脑子不够,只写了一点点