目录
以上也算是为后来人做的一点贡献吧~
#题目一
关羽过关斩三将,输入四个人的武力值(大于0小于50),若超过界限需要重新输入,关羽的武力值x,将士武力值为y,满足(x-y)^2+(x-y)+41 若为素数则关羽获胜,若关羽三次获胜输出WIN,若失败则输出失败的将领序号(第几关)。
思路:
#include
#include
#include
#define MAX 10000
using namespace std;
bool prime[MAX];
void is_prime(){
memset(prime,true,MAX);
for(int i=2;i=50)
flag=false;
for(i=1;i<4;i++){
scanf("%d",&enemy[i]);
if(enemy[i]<=0||enemy[i]>=50)
flag=false;
}
if(flag)
break;
else{
printf("武力值应该在0到50之间\n");
continue;
}
}
bool flag=true;//如果输一把立即将此标记为false;
for(i=1;i<4;i++){
if(!solve(x,enemy[i])){
flag=false;
break;
}
}
if(flag){
printf("WIN\n");
}
else
printf("关羽输给了第%d个将军",i);
return 0;
}
不保证答案正确性,只是提供一种思路
#题目二:
输入N个员工,每个员工输出ID号,上班时间,下班时间,第一行输出最早去的员工的ID和上班时间第二行输出最迟走的员工的ID和下班时间第三行输出工作最久的员工的ID和上班时间(数据瞎编的)
sampleinput:
ID100001,07:00:0017:00:00
ID100002,08:00:0018:00:00
ID100003,09:00:0021:00:00
sampleout:
OPEN:ID100001,07:00:00
CLOSE:ID100003,21:00:00
(…):ID100003,12:00:00
思路:
1.定义时间结构体,方便存储时间类型的数据
2.定义学生结构体,存储学生的相关信息,信息里面包含时间结构体
3.根据题目要求定义三种排序规则cmp1,cmp2,cmp3.然后调用这些排序函数,逐行输出排序之后的结果即可。
#include
#include
#include
#include
#include
using namespace std;
struct time{
int hour;
int min;
int sec;
};
struct employer{
char id[100];
struct time t1,t2;
int diff;
}buf[100];
bool cmp1(employer a,employer b){//比较出上班时间最早的
if(a.t1.hour!=b.t1.hour)
return a.t1.hourb.t2.hour;
else if(a.t2.min!=b.t2.min)
return a.t2.min>b.t2.min;
else
return a.t2.sec>b.t2.sec;
}
bool cmp3(employer a,employer b){//比较出留在单位的时间最长的
return a.diff>b.diff;
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i
#题目三:
有一个MN的材料和一个st的模板,从材料中切除模板,求最大能切出来的模板的数量。
sample input
:
3 4
a b c d
c d a b
a c c d
2 2
a b
c d
sample out
2
sample output
:
思路:
写法一:
#include
#include
#include
#include
#define MX 100
#define MY 100
char map_a[MX][MY];//存储大图
char map_b[MX][MY];//存储小图
//char temp[MX][MY];//存储变化中的图
using namespace std;
int m,n,s,t,ans;//用来储存大图和小图的长和宽
bool judge(char Map[MX][MY],int x,int y){//判断大图里面是否包含小图
for(int i=0;ians)//更新答案
ans=max;
if(y>=n)//给出程序出口
return ;
if(x>=m)
dfs(Map,0,y+1,max);//第一列走完了之后,换第二列
else{
if(judge(Map,x,y)){
char temp[MX][MY]={0};
for(int i=0;i>m>>n;//输入大图的长和宽
for(int i=0;i>map_a[i][j];
cin>>s>>t;//输入小图的长和宽
for(int i=0;i>map_b[i][j];
ans=0;
dfs(map_a,0,0,0);
cout<
写法二:
此写法更新于0324杭电6教计算机考研教室
#include
#include
#include
#include
using namespace std;
#define MAX 1010
char map[MAX][MAX],mapb[MAX][MAX];
char temp[MAX][MAX];//记录中间图的变换,方便在递归中的回溯进行使用
int M,N,s,t;//分别为这两个图形的长和宽
int Max,ans;//分别记录每次遍历的最大块儿数和最终答案
bool judge(char map[][MAX],int i,int j){//传入当前所搜索到的位置
int x=i;int y=j;//x来表示行数,y来表示列数
for(i=0;i=M){//记录递归出口,走到最后一行就返回
return ;
}
for(int i=y;i>M>>N;
for(int i=0;i>map[i][j];
cin>>s>>t;
for(int i=0;i>mapb[i][j];
ans=0;Max=0;
dfs(map,0,0,0);
cout<