前言
作为第一次参加蓝桥杯的小白,我特别想创建一个专门的文章来记录这几个月的练习过程,没怎么写过文章,所以文章内容会很呆板,再加上之前学习的c++差不多已经忘光了。希望各位大佬看到这篇文章时,可以为我提一些意见,这些意见就是我最大的鼓励!
在练习的过程中难免会遇见对于我来说很有价值的问题,各位大佬可以忽略自我总结部分,因为主要是为我而写,就写的很差T T。
在练习之前,需要选择一个编译器来提升代码的熟练度,这里我直接使用的是蓝桥杯提供的dev-cpp软件,当然也可以用VsCode,只要写全了头文件,对于训练过程没有太大的影响。
一、数列排序
问题:给定一个长度为n的数列,将这个数列按从小到大的顺序排列。(1<=n<=200)
#include <iostream>
#include <stdio.h>
#include <stdlib.h
#define Maxsize 200
#define Minsize 1
using namespace std;
void Order(int *data,int num)
{
int i,j;
for(i=0;i<num-1;i++)
{
for(j=0;j<num-1;j++)
{
if(*(data+j)>*(data+j+1))
{
swap(*(data+j),*(data+j+1));
}
}
}
for(i=0;i<num;i++)
{
printf("%d ",*(data+i));
}
}
int main()
{
int num;//数组长
int *data;
scanf("%d",&num);
if(num<Minsize || num>Maxsize)
{
printf("请输入合法数组长!请重新输入:");
scanf("%d",&num);
}
data=(int *)malloc(num*sizeof(int));
for(int i=0;i<num;i++)
{
cin >>data[i];
}
Order(data,num);
return 0;
}
结果:
本题总结:
- 在蓝桥杯的比赛中,使用的是老版软件Dev-cpp,因此在写c++时的头文件要齐全,如这道题中,原本我只写了<iostream>的头文件,导致printf、scanf和malloc函数编译器无法识别,因此要写全所有的头文件!!!!
- 在想输入一串数组数据又不想只能用回车当间隔符,可以不使用scanf的标准输入,而使用cin输入流,因为cin中输入空格等空白符是不会记录下来的,因此不仅可以用回车还可以用空格、制表符等等。等待到所有的数组数据输入完成,回车就可以退出cin输入流。
- swap()函数在c中的algorithm.h头文件中,在c++中的iostream.h头文件中。swap()中函数的形参设为指针,然后将指针上对应的数值进行交换,地址上的值就会改变。由于传递的是两个变量的内存地址(指针)使得我们可以直接操作对应的值。
void swap(int &a, int &b) { int temp = a; a = b; b = temp; }
- 冒泡排序学习
(原文:JS-Sorting-Algorithm/bubbleSort.md at master · hustcc/JS-Sorting-Algorithm · GitHub)
二、十六进制转八进制(本题代码内容参考他人,非原创)
问题:给定n个十六进制正整数,输出它们对应的八进制数。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
#define Maxsize 10
#define Minsize 1
int main()
{
int num;
cin >>num;
for(int i=0;i<num;i++)
{
string sixteen;
string eight;
string two;
cin >>sixteen;
for(int j=0;j<sixteen.length();j++)
{
switch(sixteen[j])
{
case '0':two+="0000";break;
case '1':two+="0001";break;
case '2':two+="0010";break;
case '3':two+="0011";break;
case '4':two+="0100";break;
case '5':two+="0101";break;
case '