编程Day

目录

8022   201509-2 日期计算

8023   201403-2 窗口

8024   201409-3 字符串匹配

8025  201312-3  最大的矩形

8026  201512-2  消除类游戏

8027  201503-2 数字排序

8028 201703-2 学生排队

8029 201712-2 游戏

8030 201709-2 公共钥匙盒

8031 201803-2 碰撞的小球

9001    201409-2 画图

9002    201312-2 ISBN号码

9003  牛客在线编程  数串

9004  牛客在线编程  句子反转  

9005  牛客在线编程 求数列的和

9006  牛客在线编程  统计字符

9007 牛客在线编程 进制转换

9008 201803-1  跳一跳

9012  牛客在线   拼凑面额

9013 牛客在线编程   整数加法


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

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值