编程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
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<

8023   201403-2 窗口

//方法1:基本的数组内的两行交换
//方法2:
#include
using namespace std;
struct Node{
	int label,x1,y1,x2,y2;
};
struct Node node[11];// 这个,正确 
//vector 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<

8024   201409-3 字符串匹配

#include
#include
#include
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>str[i];
	  brr[i]=str[i];
	}
	for(int i=0;i

8025  201312-3  最大的矩形

#include
using namespace std;
int main()
{
	int n;
	cin>>n;
	int array[n];
	for(int i=0;i>array[i];
	}
	int width=1,result=0,temp=0;
	for(int i=0;i=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<

8026  201512-2  消除类游戏

#include
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>array[i][j];
			brray[i][j]=array[i][j];
			temp[i][j]=array[i][j];
		}
	}
	//行的检测 
	for(int i=0;i

8027  201503-2 数字排序

#include
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>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;ibrray[k].a)
			{
				swap(brray[i],brray[k]);
			}
		}
	}
	//输出 
	for(int i=0;i

8028 201703-2 学生排队

#include
using namespace std;
int main()
{
	int n,m;
	cin>>n>>m;
	vector V(n);//必须添加(n),对V的个数初始化 
	for(int i=0;i::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

8029 201712-2 游戏

#include
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<

8030 201709-2 公共钥匙盒

#include 
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>N>>K;
    //创建Action类型的Vector数组 
    vector actions;
    //钥匙的初始化排序 
    vector result(N+1);
    for(int n=1;n<=N; n++) result[n] = n;
    for(int k=0;k>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

8031 201803-2 碰撞的小球

#include
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;ichange[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<

9001    201409-2 画图

#include
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

9002    201312-2 ISBN号码

#include 
#include 
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 
using namespace std;
int main()
{
	string str;
	cin>>str;
	int temp=1,sum=0;
	for(int i=0;i

9003  牛客在线编程  数串

#include
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>data[i];
	}
    for(i=0;i

9004  牛客在线编程  句子反转  

#include
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<

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

#include
using namespace std;
int main()
{
    int n,m;
    cin>>n>>m;
    double sum=0;
    double temp=n;
    for(int i=0;i

9006  牛客在线编程  统计字符

#include
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

9007 牛客在线编程 进制转换

#include
using namespace std;
int main()
{
	int T;
	cin>>T;
    int num=T,sum=0;
    //vector V;
//第一步:2~num-1 之间进制的转换 ,放入vector中 并求和 
	for(int i=2;i

9008 201803-1  跳一跳

#include
using namespace std;
/*
1.输入终止用 ctrl +D 控制,测试正确 
2.依据输入的0位终止条件 
*/
int main()
{
	int arr[31],sum=0,x,j;
	vector V; 
	while(cin>>x)
	{ 
		V.push_back(x);
	}
	for(int i=0;i

9012  牛客在线   拼凑面额

#include
#include
using namespace std;
  
int main()
{
    int N;
    char a[6]={1,5,10,20,50,100};
    cin>>N;
    vector 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<<"*"<

9013 牛客在线编程   整数加法

代码比较繁琐,但是也是case是100了,有需要的改进的地方,在此就直接提交这个面向过程的代码,便于后期查看。

#include
using namespace std;
int main()
{
	 string S,S1,S2;
	 int flag=0;
	 //数据输入 并拆分 
	 getline(cin,S);
	 for(int i=0;i'9')
	 	{
	 		flag=1;
	 		break;
	 	}	
	 }
	 int D1,D2;
	 vector R;
	 if(flag)cout<<"error"<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(D1cha-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<

 

你可能感兴趣的:(C++,AND,CCF)