201604-2 俄罗斯方块
我个大傻子,把题目想的很复杂,然后数组大小还设置错,太愚蠢了,写了好久好久
int dot[20][20];
int pattern[5][5];
int pos=0;
int main(){
for(int i=1;i<=15;i++){
for(int j=1;j<=10;j++){
cin>>dot[i][j];
}
}
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++){
cin>>pattern[i][j];
}
}
cin>>pos;
int b=0,flag=0;
for(int i=1;i<=10;i++) dot[16][i]=1;
for(int k=0;k<=15;k++){
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++){
if(pattern[i][j]&&dot[i+k][pos+j-1]){
flag=1;
}
}
}
if(flag==1){
b=k;
break;
}
}
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++){
dot[b+i-1][pos+j-1]+=pattern[i][j];
}
}
for(int i=1;i<=15;i++){
for(int j=1;j<=10;j++){
cout<<dot[i][j]<<' ';
}
cout<<endl;
}
system("pause");
return 0;
}
//
201604-3 路径解析
好吧,没看懂题目。
找了题解才搞明白。
跟着题解写了一遍QAQ
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include <string>
#include <bits/stdc++.h>
#include <vector>
#include <sstream>
using namespace std;
int n,m;
int main(){
cin>>n;
string curdir,dir,temp;
cin>>curdir;
cin.get();//用于读取换行符
for(int i=0;i<n;i++){
getline(cin,dir);
if(dir=="") dir=curdir;//为空,输出根目录
if(dir[0]!='/'){//相对路径 前面加上当前目录
dir=curdir+'/'+dir;
}
for(int j=0;j<dir.size();j++){//将所有'/'替换为' '便于分割
if(dir[j]=='/') dir[j]=' ';
}
vector<string> newdir;
stringstream str(dir);//利用stringstream对路径字符串进行分割
while(str>>temp){
if(temp==".") continue;//当前目录不用处理
else if(temp==".."&&!newdir.empty()) newdir.pop_back();//跳到上级目录,出栈
else if(temp!="..") newdir.push_back(temp);//文件夹或文件,压栈
}
cout<<'/';
for(int j=0;j<newdir.size();j++){
if(j) cout<<'/';
cout<<newdir[j];
}
cout<<endl;
}
return 0;
}
//
201609-1 最大波动
很简单
using namespace std;
int n;
int main(){
cin>>n;
int num[1005];
for(int i=0;i<n;i++){
cin>>num[i];
}
int max=0,temp=0;
for(int i=1;i<n;i++){
temp=abs(num[i]-num[i-1]);
max=max>temp?max:temp;
}
cout<<max;
return 0;
}
//
201609-2 火车购票
题目简单,分情况讨论。
不过我细节上总是出错,浪费了很多时间。
int n;
int main(){
cin>>n;
int num[105],row[20];
int com[105];
int count=0;
for(int i=0;i<n;i++){
cin>>com[i];
}
memset(num,0,sizeof(num));
memset(row,0,sizeof(row));
for(int i=0;i<n;i++){//遍历每一个票数
for(int j=0;j<20;j++){//遍历20排
if(row[j]<=5&&(5-row[j])>=com[i]){//某排有足够空位
for(int k=0;k<5&&com[i];k++){
if(num[5*j+k]==0){
cout<<5*j+k+1<<' ';
num[5*j+k]=1;
row[j]++;
com[i]--;
}
}
break;
}
}
if(com[i]){
for(int k=0;k<100&&com[i];k++){
if(num[k]!=1){
num[k]=1;
cout<<k+1<<' ';
row[k/5]++;
com[i]--;
}
}
}
cout<<endl;
}
return 0;
}
//