欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 蓝桥杯冲刺

蓝桥杯冲刺

2025/4/5 13:29:57 来源:https://blog.csdn.net/2402_84440417/article/details/146587324  浏览:    关键词:蓝桥杯冲刺

例题1:握手问题

在这里插入图片描述

方法1:数学推理(简单粗暴)

在这里插入图片描述

方法2:用代码实现方法1

#include<iostream>
using namespace std;
int main()
{int result = 0;for (int i = 1; i <= 49; i++){for (int j = i + 1; j <= 50; j++){//第i个人与第j个人之间的握手总次数(不考虑这7个人之间互不握手)result++;}}//这7个人之间握手的次数是21次cout << result - 21;return 0;
}

方法3:直接计算握手的总次数

#include<iostream>
using namespace std;
int main()
{int arr[51] = { 0 };for (int i = 1; i <= 7; i++)arr[i] = 1;//假设前7个人之间互不握手,在数组中用1做标记int result = 0;for (int i = 1; i <= 49; i++){for (int j = i + 1; j <= 50; j++){//第i个人与第j个人握手if (!(arr[i] == 1 && arr[j] == 1))result++;}}cout << result;return 0;
}

例题2:好数(两种方法)

在这里插入图片描述

方法1:从最低位开始,逐位判断每一位是否满足好数的条件

#include <iostream>
using namespace std;
bool hN(int x)
{int t = 1;//此时t表示最低位 while (x != 0){if (t % 2 == 1)//若奇数位上的数是偶数,则该数不是好数 {if ((x % 10) % 2 == 0)return false;}else//若偶数位上的数是奇数,则该数不是好数 {if ((x % 10) % 2 == 1)return false;}x /= 10;t++;}return true;
}int main()
{int N = 0;cin >> N;int sum = 0;for (int i = 1; i <= N; i++){if (hN(i) == true)sum++;}cout << sum;return 0;
}

方法2:分别得到奇数位与偶数位,然后判断是否满足好数的条件

#include <iostream>
using namespace std;
bool hNum(int x)
{int temp=x/10;while(x)//判断奇数位上的数是否是偶数{if((x%10)%2==0)return false;x/=100;}while(temp)//判断偶数位上的数是否是奇数{if((temp%10)%2==1)return false;temp/=100;}return true;
}int main()
{int N=0,count=0;cin>>N;for(int i=1;i<=N;i++){if(hNum(i))count++;}cout<<count;return 0;
}

例题3:牛数问题(一种正确解法和一种看起来正确的解法)

第一年的时候,有一头母牛,它从第二年开始,每年年初生一头小母牛,每头小母牛从第4个年头开始,也生一头小母牛,请问第n年的时候,有多少头牛?(n>0&&n<55)

方法1(看起来正确):数学推理法

在这里插入图片描述
n>3时的公式是根据n=4~7的数据推导的,也就是说当n<=7时满足公式,其余情况下就不满足了,例如当n=8时,公式得出的结果是18,但正确结果是19(我只能说太坑了)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
unsigned int sum(unsigned int n)
{if (n <= 3)return n;elsereturn (pow(n, 2) - 5 * n) / 2 + 6;
}int main()
{unsigned int n = 0;printf("请输入年份\n");scanf("%u", &n);unsigned int count = sum(n);printf("第%u年有%u头牛", n, count);return 0;
}

方法2(正确解法)

#include<iostream> 
using namespace std;
/*
经分析可知,一共有四种牛,分别用a、b1、b2、b3表示这四种牛的数量 
a:母牛的数量
b1:1岁的小母牛的数量
b2:2岁的小母牛的数量
b3:3岁的小母牛的数量
*/int main()
{int num[55];//num[1]~num[54]存储第1~54年牛的数量 int a=1,b1=0,b2=0,b3=0;//第一年四种牛的数目 num[1]=1;for(int i=2;i<55;i++) {a = a + b3;//第i年的母牛数 = 第i-1年的(母牛数 + 3岁的小母牛数 )//for循环用于求第i年的牛数num[i] = num[i-1] + a; //第i年的牛数 = 第i-1年的牛数 + 第i年年初母牛生的小母牛的数量b3 = b2;//第i年的3岁小母牛数 =  第i-1年的2岁小母牛数b2 = b1;//第i年的2岁小母牛数 =  第i-1年的1岁小母牛数/	b1 = a; //第i年的1岁小母牛数 =  第i年的母牛数 }int n;cout<<"请输入年份\n" ;cin>>n;cout<<num[n];return 0;
}

例题3:蛇形上三角

在这里插入图片描述

思路

创建一个100行100列的数组,存储100行的蛇形上三角,再根据输入n的值,打印对应的蛇形上三角

#include<iostream>
using namespace std;
int main()
{int arr[100][100]={1};/*
5行的蛇形上三角 0 1 2  3  4 
0	 1 3 6 10 15
1    2 5 9 14
2    4 8 13
3    7 12
4    11*/int temp=1;for(int i=1;i<100;i++){arr[i][0]=arr[i-1][0]+temp;temp++;}temp=2;for(int i=0;i<100;i++){int m=temp;for(int j=1;j<100;j++){arr[i][j]=arr[i][j-1]+temp;temp++;}	temp=m+1;}int n;cin>>n;//如何根据根据输入n的值,打印对应的蛇形上三角 for(int i=0;i<n;i++){for(int j=0;j<n-i;j++){/*第1行(i=0)打印n个元素,j从0到n-1,即j<n第2行(i=1)打印n-1个元素,j从0到n-2,即j<n-1第3行(i=2)打印n-2个元素,j从0到n-3,即j<n-2......第n行(i=n-1)打印1个元素,j=0,即j<1 因此j<n-i */cout<<arr[i][j]<<" ";}cout<<endl;}return 0;
}

再提供一种输出蛇形上三角的方法

	int n;cin>>n;//如何根据根据输入n的值,打印对应的蛇形上三角 int a=n; for(int i=0;i<n;i++){for(int j=0;j<a;j++){cout<<arr[i][j]<<" ";}cout<<endl;a--;}

例题四:去除整型数组中的重复元素,将剩下元素排为升序

思路

先将该数组元素排为升序,然后再去掉重复元素

#include<iostream>
using namespace std;
#include<algorithm>
int main()
{int n;cin>>n;getchar();//读取换行符 int arr[n];//变长数组,数组的大小可以用变量来指定for(int i=0;i<n;i++)cin>>arr[i]; getchar();//读取换行符 //例用sort函数,使用前要包含头文件<algorithm>,将数组中的元素排为升序sort(arr,arr+n);//arr是数组中首元素的地址,arr+n是数组中最后一个元素的下一个元素的地址 int arr2[n];int pos=0;for(int i=0;i<n;i++){if(arr[i]!=arr[i+1]){arr2[pos]=arr[i];pos++;}}//打印arr2数组中的元素个数 cout<<pos<<endl;for(int i=0;i<pos;i++)cout<<arr2[i]<<" ";return 0;
} 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词