第一题:求峰值(100分) 题目内容:
编写程序求峰值个数。有一个数组A,找出A中满足大于或小于左右两个元素的元素,首尾两个元素忽略,例如A={12,45,32,0,14,25,62,48,51},则峰值有45,0,62,48,峰值个数为4。
要求:编写函数int peak(int *a, int *p, int
n)实现在a为首地址的n个大小的数组中发现峰值,并将峰值依次保存在p指向的单元中,返回峰值个数。在main函数中实现数组的定义和输入,调用peak函数后将峰值及其个数输出。
输入格式:
先输入一个正整数(不大于600),代表数组中元素的个数,然后依次输入数组A中的元素
输出格式:
依次输出A中峰值,如果没有则不输出。最后输出满足条件的元素的个数。不要有多余的输出
输入样例:
9 12 45 32 0 14 25 62 48 51
输出样例:
45 0 62 48 4
注:这里使用的是void Peak()函数,题目中要求的是int Peak()函数。
#include<iostream>
using namespace std;
int res_index = 0;
//用于查找峰值数的函数
bool FindNum(int front_num, int middle_num, int end_num) {
if ((middle_num > front_num && middle_num > end_num) || (middle_num < front_num && middle_num < end_num)) return true;
return false;
}
void Peak(int* arr, int* p, int n) {
for (int i = 1; i < n - 1; i++) {
if (FindNum(arr[i - 1], arr[i], arr[i + 1])) p[res_index++] = arr[i];
}
}
int main() {
int arr_size = 0, arr[600], res[600];//数组res用于记录峰值
cin >> arr_size;
for (int i = 0; i < arr_size; i++) {
cin >> arr[i];
}
Peak(arr, res, arr_size);
for (int i = 0; i < res_index; i++) {
cout << res[i] << endl;
}
cout << res_index;
return 0;
}
第二题:IP地址转换输出(100分)
题目内容:
编写函数void printIP(char
*s),利用指针访问方式,将s指向的32位二进制字符串,转换成十进制格式的IP地址输出,其中十进制IP地址由4个十进制数组成(分别对应4个8位的二进制数),中间用.分割开。在main函数中输入二进制串,调用printIP函数输出结果。
输入格式:
输入32位二进制字符串
输出格式:
输出转换后的IP地址,中间用.分割开。
输入样例:
00000000000000000000000000000000
输出样例:
0.0.0.0
#include<iostream>
using namespace std;
//用于计算2的n次方
int calc(int n) {
if (n == 0) return 1;
int res = 1;
for (int i = 0; i < n; i++) res *= 2;
return res;
}
void Print(char* s) {
int ip[4] = { 0 };
//数值转换
for (int i = 0; i < 32; i++) ip[i / 8] += (s[i] - '0') * calc(7 + (i / 8) * 8 - i);
//打印结果
for (int i = 0; i < 3; i++) cout << ip[i] << ".";
cout << ip[3];
}
int main() {
char ch[33];
cin >> ch;
Print(ch);
return 0;
}
第三题:整数个数(100分)
题目内容:
输入一个字符串,串内有数字和非数字字符,如:abc2345 345rrf678 jfkld945将其中连续的数字作为一个整数,依次存放到另一个整型数组b中。如对于以上的输入,将2345存放到b[0],345放入b[1],…。统计出字符串中的整数个数,并输出这些整数。要求在主函数中完成输入和输出,设计一个函数StrToInt(char
*str, int * b),把指向字符串的指针和指向整数的指针作为函数形参。
输入格式:
输入一个含有数字和非数字字符的字符串,长度不超过1000,且其中的整数都不超过整型的取值范围
输出格式:
依次输出字符串中包含的整数
输入样例:
abc2345 345rrf678 jfkld945
输出样例:
2345 345 678 945
#include<iostream>
using namespace std;
void StrToInt(char *str, int * arr) {
int index_of_arr = 0;
//核心转换
for (int i = 0; str[i] != 0; i++) {
if (str[i] >= '0' && str[i] <= '9') {
int j = i;
while (str[j] <= '9' && str[j] >= '0') {
arr[index_of_arr] *= 10;
arr[index_of_arr] += str[j] - '0';
j++;
}
index_of_arr++;
i = j;
}
}
//打印结果
for (int i = 0; i < index_of_arr; i++) cout << arr[i] << endl;
}
int main() {
char str[1000];
int arr[1000] = { 0 };
cin.getline(str, 1000);
StrToInt(str, arr);
return 0;
}