开辟空间:
对于一个数:
类型* 名字 = new 类型; //申请的该段内存没有进行任何操作;
类型* 名字 = new 类型(); //将该段内存初始化为0;
类型* 名字 = new 类型(初始化值); //将该段内存初始化为一个确定的值;
对于一个数组:
类型* 名字 = new 类型[数组大小];
类型* 名字 = new 类型[数组大小](初始化值); //该数组的所有元素都赋值为一个确定的值;
类型* 名字 = new 类型[数组大小](); //该数组的所有元素都赋值为0;
释放空间:
delete 名字; //一个数;
delete[] 名字; //一个数组;
#include <iostream>
using namespace std;
int main()
{
int n = 10; //动态一维数组长度
int* a = new int[n]; //申请一维动态数组的空间
int i; //循坏变量
for (i = 0; i < n; i++)
{
a[i] = i;
}
for (i = 0; i < n; i++)
{
cout << a[i] << " ";
}
delete[] a; //释放一维数组的空间
return 0;
}
int main()
{
int n;
cin >> n;
int* a = new int[n];
a[0] = a[1] = 1;
for (int i = 2; i < n; i++)
{
a[i] = (a[i - 1] + a[i - 2]) % (1e+8 + 7);
}
for (int i = 0; i < n; i++)
{
if (i == 0)
{
cout << a[i];
}
else
{
cout << " " << a[i];
}
}
delete[]a;
return 0;
}
我们经常会遇到一大段数字中间要有空格最后不用输出空格的情况该怎么处理最简单呢
for (int i = 0; i < n; i++)
{
if (i == 0)
{
cout << a[i];
}
else
{
cout << " " << a[i];
}
}
#include<iostream>
using namespace std;
int main()
{
int n, b, a[11] = { 0 };
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> b;
a[b]++;
}
for (int i = 1; i <= 10; i++)
{
cout << a[i] << endl;
}
return 0;
}
【例 4】输入一个正整数 a,然后逐位调整 a 的值。如果 a 的某位数为偶数,则该位数保持 不变;如果 a 的某位数是奇数,则该位数减一,但当此位是最高位且为 1 时不要减。输出变化后的 a 值。
例如当 a 为 12701 时,应该把 a 改为 12600。
#include<iostream>
using namespace std;
int main()
{ int a, len = 0;//len 保存 a 的位数
int b[10] = { 0 };
cin >> a;
while (a > 0)
{
b[len] = a % 10;
a = a / 10;
len++;
}
//从 b[len-1]到 b[0]依次记录了 a 从高位到低//位的所有位的值
for (int i = len - 1; i >= 0; i--)
{
if (b[i] % 2 == 0 || i == len - 1 && b[i] == 1)
{
continue;
}
b[i]--;
}
//重新拼凑回 a
a = 0;
for (int i = len - 1; i >= 0; i--)
{
a = a * 10 + b[i];
}
cout << a;
return 0;
}
【例 5】输入一个正整数 n,然后输入 n 个整数存放在长度为 n 的数组 a 中,求其中的最小 值以及最小值对应的数组下标。(假设最小值只有一个,没有并列最小的情况)
分析:
用 min 存放当前的最小值,minPos 存放最小值对应的数组下标。
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int* a = new int[n];
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
int min = a[0], minPos = 0;
for (int i = 1; i < n; i++)
{
if (a[i] < min)
{
min = a[i];
minPos = i;
}
}
cout << min << " " << minPos;
delete[]a;
return 0;
}
【例 6】输入一个正整数 n,然后输入 n 个整数存放在长度为 n 的数组 a 中,输出其中的最 小值,换行,再输出最小值对应的数组下标。(并列最小的时候依次输出所有并列最小元素 的下标,每两个下标之间有一个空格)
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int* a = new int[n];
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
int min = a[0];
for (int i = 1; i < n; i++)
{
if (a[i] < min)
{
min = a[i];
}
}
cout << min << endl;
bool first = true;
for (int i = 0; i < n; i++)
{
if (a[i] == min)
{
if (first) //第一个下标前不要空格,其它下标输出前都要先空格
{
first = false;
}
else
{
cout << " ";
}
cout << i;
}
}
delete[]a;
return 0;
}