继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

与算法有关的习题二道(猿问上回答的)

东风冷雪
关注TA
已关注
手记 62
粉丝 73
获赞 369

在猿问上回答了几道题,其中二题还不错,记录一下

题一

要求输入一串不是很长的字符串,在最大的字符后加(max),字符串没有空格,只在第一个出现最大的字符后加(max)。
例如
输入 a b z d
输出 a b z(max) d

思路,
1.0 首先把字符串变成字符数组,
2.0 在找出最大字符串位置,
3.0 最后添加(max),把字符数组变成字符串

code

#include <iostream>
#include<string>
using namespace std;
void display(char ch[],int n);
int locate(char ch[],int n);
int main() {

    string str;
    std::cout << "put into string" << std::endl;
    cin>>str;
    //测量字符串数组长度
    int len=str.length();
    cout<<"leng of string:"<<len;

    char *p; //动态数组分配
    p=new char[len];
 //字符串变成字符数组
    for(int i=0; i<len; i++)
    {
         p[i]=str[i];

    }

    cout<<endl;

    display(p,len);
    cout<<endl;

    int loc=locate(p,len);
    cout<<"最大位置:"<<loc;

    cout<<endl;

  char *p1=new char[len+5];

    for(int i=0; i<loc+1; i++)
    {
        p1[i]=p[i];

    }

   p1[loc+1]='('; p1[loc+2]='m';
    p1[loc+3]='a'; p1[loc+4]='x'; p1[loc+5]=')';

    for(int i=loc+6; i<len+5; i++)
    {
        p1[i]=p[i-5];
    }

//字符数组变成字符串
    str=p1;
    cout<<endl;
    cout<<" 合并为:"<<str;
    return 0;
}

//打印字符数组
void display(char ch[],int n)
{
    for(int i=0; i<n; i++)
        cout<<ch[i]<<" ";
}

//找到最大字符位置
int locate(char ch[],int n)
{
    char max=0;
    for(int i=1; i<n; i++)
    {
        if(ch[max]<ch[i])
            max=i;
    }

    return  max;

}

结果

/home/dfzxk/CLionProjects/untitled3/cmake-build-debug/untitled3
put into string
zsdfhyuztryu
leng of string:12
z s d f h y u z t r y u 
最大位置:0

 合并为:z(max)sdfhyuztryu
Process finished with exit code 0

<hr>

题二

timu.jpg

哪位提问者给的是倒着的。。。。。

思路,申请二个数组存放奇数数组和偶数数组,主要设计数组动态分配问题

code

#include <stdio.h>
#include "stdlib.h"
const  int N=10;
void  display(int arr[],int n);
int main() {

    int arr[N];
    int i,*p;
    p=arr;

    printf("请输入任意10个整数");
    for(i=0; i<N; i++)
        scanf("%d",p+i);
/*
  for(i=1; i<11; i++)
      arr[i-1]=i;
   */

    display(arr,10);
printf("\n");
    int count1=0;
    p=arr;
    for( i=0; i<N; i++)
    {
        if(*(p+i)%2==0)
            count1++;
    }

  //  printf("count1=%d\n",count1);

    int *arr1,num1,j;
    arr1=(int *)malloc(sizeof(int)*count1);
    p=arr;
    num1=0;
    for( j=0; j<N; j++)
    {
        if(*(p+j)%2==0)
        {
            arr1[num1]=arr[j];
            num1++;
        }
    }
printf("偶数数组:");
   display(arr1,count1);
 printf("\n");

    int *arr2,k;
    arr2=(int *)malloc(sizeof(int)*(N-count1));
    p=arr;
    num1=0;
    for(k=0;k<N;k++)
    {
        if(*(p+k)%2!=0)
        {
            arr2[num1] = arr[k];
            num1++;

        }
    }

    printf("奇数数组:");
    display(arr2,N-count1);
    printf("\n");
    return 0;
}

void  display(int arr[], int n)
{
  int i;
  for(i=0; i<n; i++)
 printf("%5d",arr[i]);

}

结果

/home/dfzxk/CLionProjects/untitled1/cmake-build-debug/untitled1
请输入任意10个整数89
45
86
21
33
58
121
100
99
77
   89   45   86   21   33   58  121  100   99   77
偶数数组:   86   58  100
奇数数组:   89   45   21   33  121   99   77
熟悉慕课,以后到这里玩了。
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP