目录
8022 201509-2 日期计算
#include<bits/stdc++.h>
using namespace std;
int main()
{
int y,d,i;
cin>>y>>d;
int Mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if((y%4==0&&y%100!=0)||(y%400==0)) Mon[2]=29;
for(i=1;i<13;i++)
{
if(d>Mon[i])
{
d-=Mon[i];
}
else break;
}
cout<<i<<endl;
cout<<d<<endl;
}
8023 201403-2 窗口
//方法1:基本的数组内的两行交换
//方法2:
#include<bits/stdc++.h>
using namespace std;
struct Node{
int label,x1,y1,x2,y2;
};
struct Node node[11];// 这个,正确
//vector<Node> node; 如果是这个 程序输入进入死循环 原因我也不知道
int main()
{
int N,M,flag=0;
cin>>N>>M;
for(int i=1;i<=N;i++)
{
node[i].label=i;
cin>>node[i].x1>>node[i].y1>>node[i].x2>>node[i].y2;
}
while(M)
{
int x,y;
cin>>x>>y;
for(int i=N;i>=1;i--)
{
flag=0;
if((x>=node[i].x1&&x<=node[i].x2)&&(y>=node[i].y1&&y<=node[i].y2))
{
cout<<node[i].label<<endl;
Node temp;
flag=1;
for(int j=i;j<N;j++)
{
temp=node[j];
node[j]=node[j+1];
node[j+1]=temp;
}
break;
}
}
if(flag==0)
{
cout<<"IGNORED"<<endl;
}
M--;
}
}
8024 201409-3 字符串匹配
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string s;
cin>>s;
int m,n;
cin>>m>>n;
string str[n], brr[n];
for(int i=0;i<n;i++)
{
cin>>str[i];
brr[i]=str[i];
}
for(int i=0;i<n;i++)
{
if(m==1)
{
if(str[i].find(s)!=string::npos)//关键点1
cout<<str[i]<<endl;
}
else if (m==0)
{
transform(s.begin(),s.end(),s.begin(),(int (*)(int))toupper);//关键点2
transform(brr[i].begin(),brr[i].end(),brr[i].begin(),(int (*)(int))toupper);
if(brr[i].find(s)!=string::npos)
cout<<str[i]<<endl;
}
}
}
8025 201312-3 最大的矩形
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int array[n];
for(int i=0;i<n;i++)
{
cin>>array[i];
}
int width=1,result=0,temp=0;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(array[j]>=array[i])width++;
else break;
}
for(int k=i-1;k>=0;k--)
{
if(array[k]>=array[i])width++;
else break;
}
temp=array[i]*width;
result=max(result,temp);
width=1;
//cout<<result<<endl;
}
cout<<result;
}
8026 201512-2 消除类游戏
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
//输入
int array[n][m],brray[n][m],temp[n][m];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>array[i][j];
brray[i][j]=array[i][j];
temp[i][j]=array[i][j];
}
}
//行的检测
for(int i=0;i<n;i++)
{
for(int j=0;j<m-2;j++)
{
if(array[i][j]==brray[i][j]&&array[i][j]==brray[i][j+1]&&array[i][j]==brray[i][j+2])
{
temp[i][j]=0;
temp[i][j+1]=0;
temp[i][j+2]=0;
}
}
}
//列的检测
for(int j=0;j<m;j++)
{
for(int i=0;i<n-2;i++)
{
if(array[i][j]==brray[i][j]&&array[i+1][j]==brray[i][j]&&array[i+2][j]==brray[i][j])
{
temp[i][j]=0;
temp[i+1][j]=0;
temp[i+2][j]=0;
}
}
}
//输出
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cout<<temp[i][j]<<" ";
}
cout<<endl;
}
}
8027 201503-2 数字排序
#include<bits/stdc++.h>
using namespace std;
struct Node{
int a,b;
}brray[1001];
int main()
{
//输入
int n;
cin>>n;
int array[n],crray[1001];
memset(crray,0,sizeof(crray));
for(int i=0;i<n;i++)
{
cin>>array[i];
crray[array[i]]++;
}
//引入结构体数组
int j=0;
for(int i=0;i<1001;i++)
{
if(crray[i]!=0)
{
brray[j].a=i;
brray[j].b=crray[i];
j++;
}
}
//出现次数从大到小排序
for(int i=0;i<j-1;i++)
{
for(int k=i+1;k<j;k++)
{
if(brray[i].b<brray[k].b)
{
swap(brray[i],brray[k]);
}
}
}
// 次数相等,数值从小到大排序
for(int i=0;i<j-1;i++)
{
for(int k=i+1;k<j;k++)
{
if(brray[i].b==brray[k].b&&brray[i].a>brray[k].a)
{
swap(brray[i],brray[k]);
}
}
}
//输出
for(int i=0;i<j;i++)
{
cout<<brray[i].a<<" "<<brray[i].b<<endl;
}
}
8028 201703-2 学生排队
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
vector<int> V(n);//必须添加(n),对V的个数初始化
for(int i=0;i<n;i++)
{
V[i]=i+1;
}
vector<int>::iterator it;
while(m)//这里写m>0也是可以的
{
int p,q;
cin>>p>>q;
for(it=V.begin();it!=V.end();it++)
{
if(*it==p) break;
}
V.erase(it);
V.insert(it+q,p);
m--;
if(m==0) break;
}
//注意输出的最后一个字符后没有空格(实际提交后有空格也是case100)
//暂按没有空格来
for(int i=0;i<n-1;i++)
{
cout<<V[i]<<" ";
}
cout<<V[n-1];
}
8029 201712-2 游戏
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
int array[n];
for(int i=1;i<=n;i++)
{
array[i]=i;
}
int N=sizeof(array)/sizeof(int),temp=n;
if(k==1||n==1) cout<<n<<endl;//考虑k=1和n=1的情况
else
{
while(k!=1&&N!=1)
{
for(int i=1;i<=n;i++)
{
if(array[i]!=0)
{
if(array[i]%k==0||array[i]%10==k)
{
array[i]=0;
N--;
}
else
{
temp++;
array[i]=temp;
}
}
}
}
for(int i=1;i<=n;i++)
{
if(array[i]!=0)
{
cout<<i<<" ";
}
}
}
}
8030 201709-2 公共钥匙盒
#include <bits/stdc++.h>
using namespace std;
class Action
{
public:
int room;//钥匙号
int time;//归还事件发生的时间
int type;// 0:还钥匙, 1:借钥匙
//构造函数(初始化列表)进行类的初始化
Action(int room_,int time_,int type_):room(room_),time(time_),type(type_){}
/*重载operator<函数 :先根据time从小到大排序,再:时间相等根据是否归还排序,再:前两个相等根据房间号排序*/
bool operator<(const Action &other) const
{
if(time<other.time) return true;
else if(time==other.time && type<other.type) return true;
else if(time==other.time && type==other.type && room<other.room) return true;
return false;
}
};
int main() {
int N, K;
cin>>N>>K;
//创建Action类型的Vector数组
vector<Action> actions;
//钥匙的初始化排序
vector<int> result(N+1);
for(int n=1;n<=N; n++) result[n] = n;
for(int k=0;k<K; k++)
{
int room, begin, length;
cin>>room>>begin>>length;
actions.push_back(Action(room, begin, 1));//借钥匙
actions.push_back(Action(room, begin+length, 0));
}
/*************sort利用operator<重写函数进行排序 ******************/
sort(actions.begin(),actions.end());
/***********************取放操作**********************************/
for(int i=0;i<actions.size();i++)
{
Action act = actions[i];
//或Action &act = actions[i];//引用(别名)
if(act.type == 0) //put放(后)
{
for(int n=1; n<=N; n++)
{
if(result[n] == -1)
{
result[n] = act.room;
break;
}
}
}
else //get取(先)
{
for(int n=1; n<=N; n++)
{
if(result[n] == act.room)
{
result[n] = -1;
break;
}
}
}
}
//结果输出
for(int n=1; n<=N; n++)
{
cout<<result[n]<<" ";
}
}
8031 201803-2 碰撞的小球
#include<bits/stdc++.h>
using namespace std;
/*
1.首先进行排序 (结构体数组的排序)
2.结果的输出:不是根据change[i].id 的1-n的输出,而是根据其下边的1-n来输出
3.注意:arr数组作为中间介质,用来进行对象的比较。
*/
struct node{
int id;//排序后的下标
int no;//1标记正方向 右侧方向,0标记负方向
int num;
}change[102];
int main()
{
int n,L,t,arr[102],flag=0,temp=-1;
cin>>n>>L>>t;
//数据输入
for(int i=1;i<=n;i++)
{
cin>>arr[i];
change[i].id=i;
change[i].num=arr[i];
change[i].no=1;
}
//结构体数组排序
for(int i=1;i<n;i++)
{
node t1;
for(int j=i;j<=n;j++)
{
if(change[i].num>change[j].num)
{
swap(change[i],change[j]);
}
}
}
//操作
for(int i=1;i<=t;i++)
{
for(int j=1;j<=n;j++)
{
//当没有与该元素相等的时候
if(change[j].num==L)
{
change[j].no=0;
change[j].num-=1;
}
else if(change[j].num==0)
{
change[j].no=1;
change[j].num+=1;
}
//当存在于该元素相等的时候
else
{
for(int k=1;k<=n;k++)
{
if(arr[j]!=arr[k])
{
flag=1;
}
else if(arr[j]==arr[k]&&j!=k)
{
flag=0;
temp=k;
break;
}
}
if(flag==1)
{
if(change[j].no==1) change[j].num+=1;
else if(change[j].no==0) change[j].num-=1;
}
else if(temp>j)
{
change[j].no=0;
change[j].num-=1;
}
else
{
change[j].no=1;
change[j].num+=1;
}
}
}
for(int p=1;p<=n;p++)
arr[p]=change[p].num;
}
//输出
int p=1;
while(p<=n)
{
for(int re=1;re<=n;re++)
{
if(change[re].id==p)
{
cout<<change[re].num<<" ";
break;
}
}
p++;
}
}
9001 201409-2 画图
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,result=0;
cin>>n;
int array[101][101];
memset(array,0,sizeof(array));
while(n!=0)
{
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
for(int i=x1;i<x2;i++)
{
for(int j=y1;j<y2;j++)
{
array[i][j]=1;
}
}
n--;
}
for(int i=0;i<101;i++)
{
for(int j=0;j<101;j++)
{
if(array[i][j]==1)result++;
}
}
cout<<result<<endl;
}
9002 201312-2 ISBN号码
#include <iostream>
#include <string>
using namespace std;
int a[10];
int main()
{
string s;
cin >> s;
a[0] = s[0] - '0';
a[1] = s[2] - '0';
a[2] = s[3] - '0';
a[3] = s[4] - '0';
a[4] = s[6] - '0';
a[5] = s[7] - '0';
a[6] = s[8] - '0';
a[7] = s[9] - '0';
a[8] = s[10] - '0';
a[9] = s[12] - '0';
int sum = 0;
for (int i = 0, j = 1; i < 9; i++, j++)sum += a[i] * j;
int code = sum % 11;
char c = code == 10 ? 'X' : '0' + code;
if (s[12] == c)cout << "Right" << endl;
else{
s[12] = c;
cout << s << endl;
}
}
// FUNCTION SIGNATURE BEGINS, THIS FUNCTION IS REQUIRED
#include <bits/stdc++.h>
using namespace std;
int main()
{
string str;
cin>>str;
int temp=1,sum=0;
for(int i=0;i<str.length()-2;i++)
{
if(str[i]!='-')
{
sum+=temp*(str[i]-'0');
temp++;
}
}
// cout<<sum;
int mod=sum%11;
if(mod!=10)
{
if(mod==str[str.length()-1]-'0') cout<<"Right"<<endl;
else
{
cout<<str.substr(0,12)<<mod<<endl;
}
}
else
{
if(str[str.length()-1]=='X') cout<<"Right"<<endl;
else
{
cout<<str.substr(0,12)<<'X'<<endl;
}
}
}
9003 牛客在线编程 数串
#include<bits/stdc++.h>
using namespace std;
int main(){
int num,i,j;
cin>>num;
char data[101][5];
char tempa[7]={'\0'},tempb[7]={'\0'},temp[5]={'\0'};
memset(data,'\0',sizeof(data));
for(i=0;i<num;i++)
{
cin>>data[i];
}
for(i=0;i<num;i++)
{
for(j=i+1;j<num;j++)
{
strcpy(tempa,data[i]);
strcat(tempa,data[j]);
strcpy(tempb,data[j]);
strcat(tempb,data[i]);
if(strcmp(tempa,tempb)<0)
{
strcpy(temp,data[j]);
strcpy(data[j],data[i]);
strcpy(data[i],temp);
}
}
printf("%s",data[i]);
}
}
9004 牛客在线编程 句子反转
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str;
getline(cin,str);
int i,j=str.length();
for(i=str.length()-1;i>0;i--)
{
string temp;
if(str[i]==' ')
{
temp=str.substr(i+1,j-1-i);
j=i;
cout<<temp<<" ";
}
}
cout<<str.substr(0,j);
}
9005 牛客在线编程 求数列的和
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
double sum=0;
double temp=n;
for(int i=0;i<m;i++)
{
sum+=temp;
temp=sqrt(temp);
}
printf("%.2f",sum);
}
9006 牛客在线编程 统计字符
#include<bits/stdc++.h>
using namespace std;
int isLetter(char c)
{
return((c>='a'&&c<='z')||(c>='A'&&c<='Z'));
}
int main()
{
string str;
getline(cin,str);
int arr[1000];
memset(arr,0,sizeof(arr));
for(int i=0;i<str.length();i++)
{
arr[str[i]]++;
if(arr[str[i]]==3&&(isLetter(str[i])))
{
cout<<str[i];
break;
}
}
}
9007 牛客在线编程 进制转换
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin>>T;
int num=T,sum=0;
//vector<int> V;
//第一步:2~num-1 之间进制的转换 ,放入vector中 并求和
for(int i=2;i<num;i++)
{
while(num!=0)
{
//V.push_back(num%i);
sum+=(num%i);
num/=i;
}
num=T;
}
//第二步:分子分母进行约分
int zi=T-2;
for(int i=2;i<sum;i++)
{
if(sum%i==0&&zi%i==0)
{
sum/=i;
zi/=i;
i--;
}
}
cout<<sum<<"/"<<zi<<endl;
}
9008 201803-1 跳一跳
#include<bits/stdc++.h>
using namespace std;
/*
1.输入终止用 ctrl +D 控制,测试正确
2.依据输入的0位终止条件
*/
int main()
{
int arr[31],sum=0,x,j;
vector<int> V;
while(cin>>x)
{
V.push_back(x);
}
for(int i=0;i<V.size();i++)
{
if(V[i]==1)sum+=1;
else if(V[i]==0)break;
else if(V[i]==2&&(V[i-1]==1||i==0))
{
j=1;
sum+=2;
}
else
{
j++;
sum+=(2*j);
}
}
cout<<sum;
}
9012 牛客在线 拼凑面额
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int N;
char a[6]={1,5,10,20,50,100};
cin>>N;
vector<long> d(N+1,0);
d[0]=1;
for(int i=0;i<6;i++)
for(int j=1;j<=N;j++)
if(j>=a[i])
{
//cout<<"*"<<d[j]<<endl;
d[j]=d[j]+d[j-a[i]];
// cout<<"&"<<d[j]<<endl;
}
cout<<d[N]<<endl;
return 0;
}
9013 牛客在线编程 整数加法
代码比较繁琐,但是也是case是100了,有需要的改进的地方,在此就直接提交这个面向过程的代码,便于后期查看。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string S,S1,S2;
int flag=0;
//数据输入 并拆分
getline(cin,S);
for(int i=0;i<S.length();i++)
{
if(S[i]==' ')
{
S1=S.substr(0,i);
S2=S.substr(i+1,S.length()-1-i);
}
else if(S[i]<'0'||S[i]>'9')
{
flag=1;
break;
}
}
int D1,D2;
vector<int> R;
if(flag)cout<<"error"<<endl;
else
{
//当两个字符串长度一致时
D1=S1.length();
D2=S2.length();
int temp,temp1;
if(D1==D2)
{ temp=(S1[D1-1]-'0')+(S2[D2-1]-'0');
R.push_back(temp%10);
for(int i=D1-1-1;i>0;i--)
{
temp=temp/10+(S1[i]-'0')+(S2[i]-'0');
R.push_back(temp%10);
}
R.push_back((S1[0]-'0')+(S2[0]-'0')+temp/10);
}
else
{
//等两个字符串长度不一致时
if(D1<D2)
{
swap(D1,D2);
swap(S1,S2);
}
int cha=D1-D2;
temp1=(S1[D1-1]-'0')+(S2[D2-1]-'0');
R.push_back(temp1%10);
for(int i=D1-1-1;i>cha-1;i--)
{
temp1=temp1/10+(S1[i]-'0')+(S2[i-cha]-'0');
R.push_back(temp1%10);
}
for(int j=cha-1;j>0;j--)
{
temp1=temp1/10+(S1[j]-'0');
R.push_back(temp1%10);
}
R.push_back((S1[0]-'0')+temp1/10);
}
//逆序输出
for(int i=R.size()-1;i>=0;i--)
cout<<R[i];
}
}