C&C++刷题练习

发布时间:2024年01月04日

蓝桥杯[错误的票据]

题目

某涉密单位下发了某种票据,并要在年终全部收回每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个 ID断号,另外一个ID 重号。你的任务是通过编程,找出断号的ID和重号的ID假设断号不可能发生在最大和最小号


输入描述

要求程序首先输入一个整数N(N<100)表示后面数据行数。

接着读入N行数据。

每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于10^5)


输出描述

要求程序输出1行,含两个整数 m,n,用空格分隔。

其中,m 表示断号ID,n 表示重号ID


输入输出样例示

输入#

2
5 6 8 11 9
10 12 9

输出#

7 9

解法一:C++的解法 #

#include<bits/stdc++.h>
using namespace std;
int main()
{
    vector<int> arr;                      //开辟动态数组
    int N;                                //设置变量N表示后面数据函数
    cin >> N;
    for (int i = 0; i < N; i++)
    {
        int k = 0;
        while (cin >> k)
        {
            arr.push_back(k);             //vector的尾插
            if (cin.get() == '\n')        //当接受到回车键时,就退出当前循环
            {
                break;
            }
        }
    }
    sort(arr.begin(), arr.end());         //快速排序
    int m, n;
    for (int i = 0; i < arr.size(); i++)
    {
        if ((arr[i + 1] - arr[i]) > 1)    //如果前后两个数据>1则出现断号
       {
            m = arr[i + 1] - 1;         
       }
        if(arr[i+1] == arr[i])
            {
            n = arr[i];
            }
    }
    cout << m << " " << n;
    return 0;
}

解法二:C的解法#

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int N, arr[20000] = { 0 }, m, n, i = 0;
    scanf("%d", &N);
    while (N--)
    {
        while (scanf("%d", &arr[i])>0)
        {
            i++;
            if(getchar() == '\n')
            {
              break;
            }
        }
    }
    int PaiXu(const void* p1, const void* p2)
    {
        return (*(int*)p1 - *(int*)p2);
    }
    int rs =  sizeof(arr) / sizeof(arr[0]);
    qsort(arr,rs, sizeof(int), PaiXu);//快速排序
    for (int i = 1; i < rs; i++)
    {
     if((arr[i]-arr[i-1])>1)
    {
        m = arr[i]-1;
    }
    else if((arr[i]-arr[i-1]) == 0)
    {
       n = arr[i];
    }
    }
    printf("%d %d", m, n);
    return 0;
}

蓝桥杯[X图形]

题目

给定一个字母矩阵。一个X图形由中心点和由中心点向四个 45 度斜线方向引出的直线段组成,四条线段的长度相同,而且四条线段上的字母和中心点的字母相同。


一个X图形可以使用三个整数 r,c,L来描述,其中 r,c 表示中心点位于第r行第c列,正整数L表示引出的直线段的长度。对于1到L之间的每个整数i,X图形满足:第 r-i 行第 c-i 列与第r行第c列相同,第 r-i 行第 c+i 列与第r行第c列相同,第 r+i 行第 c-i 列与第r行第c列相同,第 r+i 行第 c+i 列与第r 行第c列相同。


例如:对于下面的字母矩阵中,所有的字母组成一个X图形,中间的5个L也组成一个X图形。所有字母Q组成了一个X图形。

给定一个字母矩阵,请求其中有多少个X图形 ?


输入格式:

输入第一行包含两个整数n,m,分别表示字母矩阵的行数和列数。

接下来n行,每行m个大写字母,为给定的矩阵。
输出格式:
输出一行,包含一个整数,表示答案。


样例输入#
5 6
LAAALA
ALQLQA
AALQAA
ALQLQA
LAAALA
样例输出#
3
#include<bits/stdc++.h>
using namespace std;
int main()
{
  int n = 0,m = 0,count = 0;
  cin>>n>>m;
  char arr[101][101] = {0};
  for(int i = 0;i<n;i++)
  {
    for(int j = 0;j<m;j++)
    {
      cin>>arr[i][j];
    }
  }
  for(int i = 1;i<n-1;i++)
  {
    for(int j = 1;j<m-1;j++)
    {
      char k = arr[i][j];
      int l = 1;
      while((k == arr[i-l][j-l])&&(k == arr[i-l][j+l])&&(k == arr[i+l][j-l])&&(k == arr[i+l][j+l]))
      {
        count++;
        l++;
      }
    }
  }
  cout<<count;
  return 0;
}

蓝桥杯[核桃的数量]?

题目:

小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:
1各组的核桃数量必须相同
2.各组内必须能平分核桃(当然是不能打碎的)
3尽量提供满足12条件的最小数量(节约闹革命嘛)


输入描述:

输入一行a,b,c,都是正整数,表示每个组正在加班的人数,用空格分开(a,b,c < 30)。

输出描述:

输出一个正整数,表示每袋核桃的数量。?

输入输出样例

输入#

2 4 5

输出#

20

解法一:C++的解法#

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a[3] = { 0 },num = 0;
    for (int i = 1; i <= 3; i++)
    {
        cin >> a[i];
    }
    int max =  *max_element(a, a + 3);//求出三组中的最大值
    for (int i = 1;; i++)             //因为我们也不知道要进行多少次,所以不设置循环条件
    {
        num = max * i;                //求最大组的倍数
                                      //判断是否满足平分的条件
        if ((num % a[1] == 0) && (num % a[2] == 0) && (num % a[3] == 0)) 
        {
            break;
        }
    }
     cout << num;
    return 0;
}

解法二:C的解法#

#include <stdio.h>
int main()
{
    int a[3] = { 0 },num = 0,max = 0;
    for (int i = 1; i <= 3; i++)
    {
      scanf("%d",&a[i]);
      if(a[i]>max)
      {
        max = a[i];
      }
    }
    for (int i = 1;; i++)            
    {
        num = max * i;                
        if ((num % a[1] == 0) && (num % a[2] == 0) && (num % a[3] == 0)) 
        {
            break;
        }
    }
     printf("%d",num);
    return 0;
}

蓝桥杯[最大距离]

题目描述:

在数列a1,a2,···,an中,定义两个元素ai和aj的距离为| i - j |+| ai - aj |,即元素下标的距离加上元素值的差的绝对值,其中| x |表示x的绝对值。
给定一个数列,请问找出元素之间最大的元素距离。


输入描述:

输入的第一行包含一个整数n。
第二行包含n个整数a1,a2,···,an,相邻的整数间用空格分隔,表示给定的数列。
其中,2<=n<=1000,0<=数列中的数 <=10^4。


输出描述:

输出一行包含一个整数,表示答案


输入输出样例:

输入#

5
9 4 2 4 7

输出#

9
#include<bits/stdc++.h>
using namespace std;
int main()
{
  int n,str[1000] = {0},max = 0;
  cin>>n;
  for(int i = 1;i<=n;i++)
  {
    cin>>str[i];
  }
 for(int i=1;i<n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            if(abs(i-j)+abs(str[i]-str[j])>max)      //abs绝对值的函数
                max=abs(i-j)+abs(str[i]-str[j]);
        }
    }
    cout<<max;
  return 0;
}

蓝桥杯[特殊年份]

问题描述:

今年是2021年,2021这个数字非常特殊它的千位和十位相等,个位比百位大1,我们称满足这样条件的年份为特殊年份。

输入5个年份请计算这里面有多少个特殊年份。


输入格式:

输入 5 行,每行一个4位十进制数(数值范围为1000至9999),表示一个年份。


输出格式:

输出一个整数表示输入的5个年份中有多少个特殊年份。


样例输入#

2019

2021

1920

2120

9899

样例输出#

2

样例说明:

2021 和 9899 是特殊年份,其它不是特殊年份。

解法一:C++的解法#?

#include<bits/stdc++.h>
using namespace std;
int main()
{
  vector<int> str;
  int count = 0;
  for(int i = 0;i<5;i++)
  {
    int b = 0;
    cin>>b;
    str.push_back(b);
  }
  for(int i = 0;i<5;i++)
  {
    int g=str[i]%10;
    int s=str[i]/10%10;
    int b=str[i]/100%10;
    int q=str[i]/1000;
    if((g == b+1)&&(q == s))
    {
      count++;
    }
  }
  cout<<count;
  return 0;
}

?解法二:C的解法#

#include <stdio.h>
int main()
{
  int str[5] = {0};
  int count = 0;
  for(int i = 0;i<5;i++)
  {
    scanf("%d",&str[i]);
  }
  for(int i = 0;i<5;i++)
  {
    int g=str[i]%10;
    int s=str[i]/10%10;
    int b=str[i]/100%10;
    int q=str[i]/1000;
    if((g == b+1)&&(q == s))
    {
      count++;
    }
  }
  printf("%d",count);
  return 0;
}

文章来源:https://blog.csdn.net/2301_79201049/article/details/135374752
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。