C++--简单算法题(3)

本文为学习记录,若有错误,请联系作者,谦虚受教。


前言

原来这就是生活。


一、获取数组最值

键盘随机输入 6 个整数,将这些数据保存到数组中,获取数组中的最小值和最大值并输出。
输入描述:
键盘随机输入 6 个整数
输出描述:
输出数组中的最小值和最大值,两个值中间使用空格隔开

#include <iostream>
using namespace std;
int main() {
    int arr[6] = { 0 };
    int len = sizeof(arr) / sizeof(int);
    
    for (int i = 0; i < len; i++) {
        cin >> arr[i];
    }
    int maxa=arr[0];
    int mina=arr[0];
    for(int i=1;i<len;i++)
    {
        if(arr[i]>maxa)
        {
         maxa=arr[i];
        }
        else if(arr[i]<mina)
        {
            mina=arr[i];
        }
    }
    cout<<mina<<" "<<maxa<<endl;  
    return 0;
}

二、数组元素反转

描述
键盘随机输入 6 个整数,将这些数据保存到数组中,先将数组中元素按照格式输出,然后再将数组元素反转,最后按照格式再次输出数组元素。
输入描述:
键盘随机输入 6 个整数
输出描述:
第一次按照格式输出数组中元素,每个元素中间使用逗号和空格隔开,整体使用中括号括起来。
例如:[5, 12, 80, 7, 15, 60]
第二次按照格式输出反转后数组中元素,每个元素中间使用逗号和空格隔开,整体使用中括号括起来。
例如:[60, 15, 7, 80, 12, 5]

#include <iostream>
using namespace std;
int main() {
    int arr[6] = { 0 };
    int len = sizeof(arr) / sizeof(int);   
    for (int i = 0; i < len; i++) {
        cin >> arr[i];
    }
    cout << "[";
    for (int i = 0; i < len; i++) {
        if (i == len - 1) {
            cout << arr[i] << "]" << endl;
            break;
        }
        cout << arr[i] << ", ";
    }
    int left=0;
    int right=5;
    while(left<right)
    {
        int temp=arr[left];
         arr[left]=arr[right];
         arr[right]=temp;
        left++;
        right--;
    }
    cout << "[";
    for (int i = 0; i < len; i++) {
        if (i == len - 1) {
            cout << arr[i] << "]" << endl;
            break;
        }
        cout << arr[i] << ", ";
    }
    return 0;
}

三、冒泡排序

描述
键盘随机输入 6 个整数,将这些数据保存到数组中,使用冒泡排序对数组中的元素进行从小到大顺序排序,输出排序后数组中的元素(元素之间使用空格隔开)。
输入描述:
键盘随机输入 6 个整数
输出描述:
输出排序后数组中的元素(元素之间使用空格隔开)

#include <iostream>
using namespace std;
int main() {
    int arr[6] = { 0 };
    int len = sizeof(arr) / sizeof(int);    
    for (int i = 0; i < len; i++) {
        cin >> arr[i];
    }
    for(int i=0;i<len;i++)
    {
        for(int j=i+1;j<len;j++)
        {
            if(arr[i]>arr[j])
            {    
                int temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;               
            }
        }
    }
    for(int i=0;i<len;i++)
    {
    if(i==len-1)
    {
        cout<<arr[i]<<endl;
    }
    else
    {
        cout<<arr[i]<<" ";
    }
    }
    return 0;
}

四、选择排序

描述
键盘随机输入 6 个整数,将这些数据保存到数组中,使用选择排序对数组中的元素进行从小到大顺序排序,输出排序后数组中的元素(元素之间使用空格隔开)。
输入描述:
键盘随机输入 6 个整数
输出描述:
输出排序后数组中的元素(元素之间使用空格隔开)

#include <iostream>
using namespace std;
int main() {
    int arr[6] = { 0 };
    int len = sizeof(arr) / sizeof(int);   
    for (int i = 0; i < len; i++) {
        cin >> arr[i];
    }
    for(int i=0;i<len;i++)
    {
        for(int j=i+1;j<len;j++)
        {
            if(arr[i]>arr[j])
            {
                int temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
            }
        }
    }
    for(int i=0;i<len;i++)
    {   
        if(i==len-1)
        {
        cout<<arr[i]<<endl;
        }
        else
        {
            cout<<arr[i]<<" ";
        }
    }
    return 0;
}

五、计算公司年销售额

描述
某公司按照季度和每个季度对应3个月份统计的数据如下:单位(万元)
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
请使用二维数组保存这些数据,并计算公司年销售总额。

#include <iostream>
using namespace std;
int main() {
    int arr[4][3] = {
        22,66,44,77,33,88,25,45,65,11,66,99
    };
    
    int sum = 0;  
    for(int i = 0; i < 4; i++) {
        for(int j = 0; j < 3; j++) {
            sum += arr[i][j];
        }
    }   
    cout << sum << endl;    
    return 0;
}

六、字符串拼接

描述
键盘输入两个字符串,将这两个字符串进行拼接后输出。
输入描述:
键盘输入两个字符串
输出描述:
输出两个字符串拼接后的结果

#include <iostream>
#include <string>
using namespace std;
int main() {        
    string s1, s2;
    getline(cin, s1);
    getline(cin, s2);
    cout<<s1+s2<<endl;
    return 0;
}

七、结构体简单使用

描述
设计一个学生结构体,该结构体具有三个成员,分别是:姓名name、年龄age、身高height。
键盘依次输入姓名、年龄和身高数据,将数据保存到学生结构体变量上,并输出学生信息。
输入描述:
键盘依次输入学生的姓名name、年龄age、身高height
输出描述:
输出学生的信息,例如:
张三 20 182.5

#include <iostream>
#include <string>
using namespace std;
struct student {
    // write your code here......
    string name;
    int age;
    double height;
};
int main() {
    student st;
    cin>>st.name>>st.age>>st.height;
    cout<<st.name<<" "<<st.age<<" "<<st.height;
    return 0;
}

八、利用指针遍历数组

描述
键盘随机输入 6 个整数,将这些数据保存到数组中,利用指针遍历数组中的元素并打印。
输入描述:
键盘随机输入 6 个整数
输出描述:
输出数组中的所有元素,每个元素中间使用空格隔开
例如:10 20 30 40 50 60

#include <iostream>
using namespace std;
int main() {
    int arr[6] = { 0 };
    int* ptr = arr;
    int len = sizeof(arr) / sizeof(int);
    for (int i = 0; i < len; i++) {
        cin >> arr[i];
    }
    for(int i=0;i<len;i++)
    {
//         if(i==len-1)
//         {
//             cout<<*ptr<<endl;
//         }
//         else{
    cout<<*ptr <<" ";
//         }
        ptr++;
    }
    return 0;
}

九、获取字符串长度

描述
键盘输入一个字符串,编写代码获取字符串的长度并输出,要求使用字符指针实现。
输入描述:
键盘输入一个字符串
输出描述:
输出字符串的长度

#include <iostream>
using namespace std;
int main() {
    char str[100] = { 0 };
    cin.getline(str, sizeof(str));
    char* ptr=str;
    int len=0;
    while((*ptr)!='\0')
    {
     len++;
     ptr++;
    }
    cout<<len<<endl;
    return 0;
}

十、复制部分字符串

描述
键盘输入一个长度为len(1 <= len < 30)的字符串,再输入一个正整数 m(1 <= m <= len),将此字符串中从第 m 个字符开始的剩余全部字符复制成为另一个字符串,并将这个新字符串输出。要求用指针处理字符串。
输入描述:
键盘输入一个长度为len(1 <= len < 30)的字符串,再输入一个正整数 m(1 <= m <= len)
输出描述:
输出复制的新字符串

#include <iostream>
using namespace std;
int main() {
    char str[30] = { 0 };
    cin.getline(str, sizeof(str));
    int m;
    cin >> m;
    char s[30]={0};
    char* ptr=str+m-1;
    char* ptr2=s;
    while(*ptr!='\0')
    {
        *ptr2=*ptr;
        ptr++;
        ptr2++;
    }
    cout<<s<<endl;
    return 0;
}

十一、创建动态数组

描述
键盘输入一个正整数 n,创建大小为 n 的数组(采用动态数组的方式),将数组中的元素初始化为 n、n+1、…、2n - 1。并输出数组中的元素。
输入描述:
键盘输入一个正整数 n
输出描述:
输出数组中的元素,元素和元素之间使用空格隔开

#include <iostream>
using namespace std;
int main() {
//请你加油去学习好不好。
    int n;
    cin >> n;   
    // write your code here......
    //新建数组
    int* p=new int[n];
    //赋值且输出值
    for(int i=0;i<n;i++)
    {
        p[i]=n+i;
        cout<<p[i]<<" ";
    }
    return 0;
}

十二、数组元素处理

描述
有一个数组 int arr[n],要求写一个函数:void func(int *p, int n);将数组 arr 中为 0 的元素都移至数组末尾,将非 0 的元素移至开始(保持原来的顺序不变)。
例如:
数组中元素原来是:1 0 3 4 0 -3 5
经过 func 处理后:1 3 4 -3 5 0 0
输入描述:
键盘输入 6 个整数,保存到数组中
输出描述:
经过 func 处理后数组的元素,元素和元素之间使用空格隔开
例如:1 3 4 -3 5 0 0

#include <iostream>
using namespace std;
//请你好好学习,好好工作,加油噢。
void func(int* p, int n);
int main() {
    int arr[6] = { 0 };
    for (int i = 0; i < 6; i++) {
        cin >> arr[i];
    }
    func(arr, 6);
    for (int i = 0; i < 6; i++) {
        if (i == 5) {
            cout << arr[i] << endl;
        }
        else {
            cout << arr[i] << " ";
        }
    }
    return 0;
}
void func(int* p, int n) {
    //采取双指针的方式
    //定义一个总是为0的指针
    int id=0;
    for(int i=0;i<n;i++)
    {
        if(p[i]!=0)
        {
            int temp=p[i];
            p[i]=p[id];
            p[id++]=temp;
            
        }
    }
}

十三、比较字符串大小

描述
编写一个函数 int mystrcmp(const char * src, const char * dst),用于比较两个字符串的大小(自己实现strcmp()函数)。要求如果字符串src大于字符串dst返回 1,小于返回 -1,相等返回 0。
输入描述:
键盘录入 2 个长度小于 100 的字符串
输出描述:
输出调用 mystrcmp() 函数返回的结果

#include <iostream>
#include<cstring>
using namespace std;
int mystrcmp(const char* src, const char* dst);
int main() {
    char s1[100] = { 0 };
    char s2[100] = { 0 };
    cin.getline(s1, sizeof(s1));
    cin.getline(s2, sizeof(s2));
    int ret = mystrcmp(s1, s2);
    cout << ret << endl;
    return 0;
}
int mystrcmp(const char* src, const char* dst) {
    int len1=strlen(src);
    int len2=strlen(dst);
    int i=0,j=0;
    while(i<len1&&j<len2)
    {
        if(src[i]<dst[j])
        {
            return -1;
        }
        else if(src[i]>dst[i])
        {
            return 1;
        }
        else{
            i++;
            j++;
        }
    }
    if(i<len1)
    {
        return 1;
    }
    else if(j<len2)
    {
        return -1;
    }
    else
    {
        return 0;
    }
}

十四、编写函数实现两数交换

描述
编写一个函数,实现两个整数的交换,要求采用指针的方式实现。
输入描述:
键盘输入2个整数 m 和 n
输出描述:
输出交换后m 和 n 的值,中间使用空格隔开

#include <iostream>
using namespace std;
int main() {
    int m, n;
    cin >> m;
    cin >> n;
     int  *q;
    int  *p;
    q=&m;
    p=&n;
    int temp=*q;//m
    *q=*p;//m
    *p=temp;//n
    cout << m << " " << n << endl;
    return 0;
}

十五、统计字符串中子串出现次数

描述
键盘输入两个字符串 str 和 substr,统计字符串 substr 在 字符串 str 中出现的次数,并输出。
输入描述:
键盘输入两个长度小于 100 的字符串 str 和 substr
输出描述:
输出字符串 substr 在 字符串 str 中出现的次数

#include <iostream>
#include <cstring>
using namespace std;
int main() {
    char str[100] = { 0 };
    char substr[100] = { 0 };
    cin.getline(str, sizeof(str));
    cin.getline(substr, sizeof(substr));
    int count = 0;
     int i=0;
    //转化成字符串
    string str1(str);
    string str2(substr);
    //从str1的下标开始查找str2
    while(str1.find(str2,i)!=-1)
    {   
        //找得到就加一
        count++;
        //从I的位置,后移一位
        i=str1.find(str2,i)+1;
    }
    cout << count << endl;
    return 0;
}

十六、使用字符函数统计字符

描述
键盘录入一句话,统计这句话中字母字符、数字字符、空白、标点符号和其它字符的个数。(使用字符函数实现)
输入描述:
键盘输入一个字符串
输出描述:
输出字符串中字母字符、数字字符、空白、标点符号和其它字符的个数。

#include <iostream>
#include <string>
using namespace std;
//请你好好学习,远离渣男
int main() {
    string str;
    getline(cin, str);
    int whitespace = 0;
    int digits = 0;
    int chars = 0;
    int others = 0;
    for(int i=0;i<str.length();i++)
    {
        if(isalpha(str[i]))//判断是否是字母
            chars++;
        else if(isdigit(str[i]))//判断是否是数字
            digits++;
        else if(isspace(str[i]))//判断是否是空格
            whitespace++;
        else
            others++;
    }
    cout << "chars : " << chars
        << " whitespace : " << whitespace
        << " digits : " << digits
        << " others : " << others << endl;
    return 0;
}

十七、函数实现计算数的阶乘

描述
编写一个函数 long long factorial(int n),用于计算 n 的阶乘。(要求使用递归实现)
输入描述:
键盘输入任意一个整数 n ,范围为 1 - 20
输出描述:
输出 n 的阶乘

#include <iostream>
using namespace std;
long long factorial(int n);
int main() {
    int n;
    cin >> n;
    cout << factorial(n) << endl;
    return 0;
}
long long factorial(int n) {
    if(n==1)
    {
        return 1;
    }
    else{
        return factorial(n-1)*n;//输出阶乘
    }
}

十八、不死神兔子问题

描述
有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第 n 个月的兔子对数为多少?
输入描述:
键盘输入任意一个正整数 n,n 的范围为 [1, 20]
输出描述:
输出第 n 个月兔子的对数

#include <iostream>
using namespace std;

int getSum(int n);

int main() {

    int n;
    cin >> n;

    cout << getSum(n) << endl;

    return 0;
}

int getSum(int n) {
    // write your code here......
     if(n==1||n==2)
         return 1;
    return getSum(n-1)+getSum(n-2);//数量是前两个月之和,找出对应的规律
}

总结

善于总结,多进一步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值