CCF刷题-0808

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;
}
//

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值