CCF试题及答案(C++)
具体代码见下:#include <iostream>using namespace std;int main(){int a[30];int n ;int count=0;while(cin>>n&&n){a[count]=n;count++;}int sum=0;int num=1;for(int i=0;.
·
具体代码见下:
#include <iostream>
using namespace std;
int main(){
int a[30];
int n ;
int count=0;
while(cin>>n&&n){
a[count]=n;
count++;
}
int sum=0;
int num=1;
for(int i=0;i<count;i++){
if(a[i]==1){
sum++;
num=1;
}
else if(a[i]==2){
sum+=2*num;
num++;
}
}
cout<<sum<<endl;
}
本题完~~~
具体代码见下:
#include <iostream>
using namespace std;
int main(){
int n,L,t;
cin>>n>>L>>t;
int a[100];
char right[100];
for(int i=0;i<n;i++){
cin>>a[i];
right[i]=true;
}
while(t--){
for(int i=0;i<n;i++){
if(right[i]){
a[i]++;
}
else{
a[i]--;
}
if(a[i]==L){
right[i]=false;
}
if(a[i]==0){
right[i]=true;
}
}
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(a[i]==a[j]){
right[i]=!(right[i]);
right[j]=!(right[j]);
}
}
}
}
cout<<a[0];
for(int i=1;i<n;i++){
cout<<" "<<a[i];
}
cout<<endl;
}
本题有一个注意点:由于第一个测试用例是小球按顺序位置依次为4、6、8,但第二个测试用例小球就不是按从左往右的顺序啦,这个需要注意!我在这一点儿上栽了个跟头,浪费了一点儿时间!
ccf第三题一直是我不太容易突破的瓶颈,一定要仔细看,耐心做,一点儿一点儿解决问题,切勿着急上火~~~
一般ccf第三题这种类型题做起来都较为复杂,不涉及什么算法知识,但是要顾及许多方方面面,稍有遗漏就很容易丢分。然后考试的时候看到这种题容易让人头大。。。。。。哎,说多了都是泪!
个人感觉还是考试的时候先在脑海里想好到底要采用什么办法来解决这道题,认真读清题意,大致有了思路之后,再写代码。
题意分析:
大体上上就是把规则和地址中的“斜杠”两边的字符串给分开,存进vector容器中,然后再一一进行匹配。但是中间却又许多细节需要注意,比如匹配也分几种不同的情况。还有要注意的是:最后地址的情况,有斜杠的和没有斜杠的规则和地址是不能匹配的!!!
代码见下:
#include <bits/stdc++.h>
using namespace std;
string rules[100],name[100];
void divide(vector<string> &v, string str){
v.clear();
string temp;
//temp.clear();
for(int i=1;i<str.length();i++){
if(str[i]=='/'){
v.push_back(temp);
temp.clear();
}
else{
temp+=str[i];
}
}
if(temp.size()!=0){
v.push_back(temp);
}
}
string check(string str){
//str.clear();
int flag =1;
for(int i=0;i<str.length();i++){
if(str[i]<'0'||str[i]>'9'){
flag=0;
break;
}
}
if(flag==1)
{
return "<int>";
}
else{
return "<str>";
}
}
vector <string> canshu;
bool check(string s,string rule){
vector<string> v1,v2;
divide(v1,s);
divide(v2,rule);
// for(int i=0;i<v1.size();i++){
// cout<<v1[i]<<endl;
// }
// for(int i=0;i<v2.size();i++){
// cout<<v2[i]<<endl;
// }
if(v1.size()<v2.size()){
return false;
}
if(v2.size()>=1){
if(v1.size()>v2.size()&&v2[v2.size()-1]!="<path>"){
return false;
}
}
if(v2.size()==0 && v1.size()!=0) return false;
int count=1;
canshu.clear();
for(int i=0;i<v2.size();i++){
if(v1[i]==v2[i]){
//cout<<"aa"<<endl;
count+=(v1[i].length()+1);
}
else if(check(v1[i])==v2[i]){
//cout<<"bb"<<endl;
//cout<<v1[i]<<"***"<<check(v1[i])<<endl;
count+=(v1[i].length()+1);
canshu.push_back(v1[i]);
}
else if(v2[i]=="<path>"){
//cout<<"cc"<<endl;
//cout<<s.substr(count,s.length()-count)<<endl;
canshu.push_back(s.substr(count,s.length()-count));
}
else{
return false;
}
}
if(s[s.size()-1]=='/' && rule[rule.size()-1]!='/') return false;
if(s[s.size()-1]!='/' && rule[rule.size()-1]=='/') return false;
return true;
}
int strToNum(string str){
int num=0;
for(int i=0;i<str.length();i++){
num=num*10+(str[i]-'0');
}
return num;
}
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>rules[i]>>name[i];
}
while(m--){
string s;
cin>>s;
bool flag = true;
int i;
for(i=0;i<n;i++){
flag = check(s,rules[i]);
//cout<<flag<<endl;
if(flag==true){
break;
}
}
if(flag==false){
cout<<"404"<<endl;
}
else{
cout<<name[i];
for(int i=0;i<canshu.size();i++){
if(check(canshu[i])=="<int>"){
cout<<" ";
cout<<strToNum(canshu[i]);
}
else{
cout<<" "<<canshu[i];
}
}
//cout<<endl;
puts("");
}
// for(int i=0;i<canshu.size();i++){
// cout<<canshu[i]<<endl;
// }
}
return 0;
}
运行结果见下:
5 4
/articles/2003/ special_case_2003
/articles/<int>/ year_archive
/articles/<int>/<int>/ month_archive
/articles/<int>/<int>/<str>/ article_detail
/static/<path> static_serve
/articles/2004/
year_archive 2004
/articles/1985/09/aloha/
article_detail 1985 9 aloha
/articles/hello/
404
/static/js/jquery.js
static_serve js/jquery.js
更多推荐
已为社区贡献1条内容
所有评论(0)