2019-10月25永立潮头笔试

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
char a[1000000];
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int output=1;
        scanf("%s",a);
        int maxn=0;
        int contz=1;
        int cont2=0;
        for(int i=0;i<n-1;i++)
        {
            if(a[i]==a[i+1])
            {
                contz++;
            }
            else
            {
                if(contz==2)cont2++;
                contz=1,output++;
            }
            maxn=max(contz,maxn);
        }
        if(contz==2)cont2++;
        if(maxn>=3)output+=2;
        if(maxn==2&&cont2>1)output+=2;
        if(maxn==2&&cont2==1)output+=1;
        printf("%d\n",output);
    }
}
#include <iostream>
using namespace std ;
int main()
{
 int n, num = 1, maxr = 1;
 cin>>n;
 int *r = new int[n];//创建长为n的数组
 int *r1 = new int[n];//备用数组
 for (int i = 0; i < n; i++)
 {
  cin>>r[i];//写入数字
 }
 for (int i = 0; i < n; i++)
 {
  r1[i] = r[i];//从原数组中复制第i个数字,以防止原数组在计算过程中被改变
  for (int j = i+1; j < n; j++)
  {
   r1[j] = r[j];//从原数组中复制第j个数字
   if (r1[i]+1 == r1[j])//判断相邻两数字是否递增1
   {
    num = num + 1;//递增1子序列的长度 
    r1[i] = r1[j];
   }
  }
  if (num > maxr)//更新递增1子序列的长度
  {
   maxr = num;
  }
  num = 1;
 }
 cout<<n-maxr<<endl;
 system("PAUSE");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值