1、最大乘积数
题目描述:给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大
思路:首先我们想到的是先对数组进行排序,然后找出前三大的数据进行相乘,就可以得到最大乘积。
例如:3 4 1 2
输出:24
话不多说,直接上代码:
C语言实现:
# include <stdio.h>
# include <stdlib.h>
void sort(int arr[],int len)
{
int tmp=0;
for(int i=0;i<len;i++)
{
for(int j=0;j<len-i-1;j++)
{
if(arr[j]<arr[j+1])
{
tmp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=tmp;
}
}
}
}
int main()
{
printf("please input:\n");
int len=0;
int arr[10]={0};
scanf("%d\n",&len);
for(int i=0;i<len;i++)
{
scanf("%d",&arr[i]);
}
len=sizeof(arr)/sizeof(arr[0]);
sort(arr,len);
int sum=arr[0]*arr[1]*arr[2];
printf("%d\n",sum);
}
结果:
c++实现:
#include<vector>
#include<iostream>
#include <algorithm>
using namespace std;
int main()
{
long long int a;
long long int max_num;
int number;
vector<long long int> num;
cin>>number;
for(int i=0;i<number;i++)
{
cin>>a;
num.push_back(a);
}
if(num.size()==3)
{
cout<<num[0]*num[1]*num[2]<<endl;
}
else
{
sort(num.begin(),num.end());
int len=num.size();
max_num=max(num[len-1]*num[len-2]*num[len-3],num[len-1]*num[0]*num[1]);
cout<<max_num<<endl;
}
return 0;
}
执行结果:
2、字符串去重
题目描述:在一个字符串中,肯定会出现重复的字母,比如banana,重复出现了a和n两个字母。现在要求保留第一次出现的字母,对第二次以及之后出现的字母进行删除。
如:banana------>ban
思路:可以定义两个数组,一个保存原有的字符串,另外一个保存处理之后的字符串。定义一个指针,从头进行遍历,依次将字母写入新的数组中,如果出现了重复的字母,则指针移动,跳过该字母,直到遍历到最后。
代码:
#include <stdio.h>
#include <string.h>
int GetResult(const char *input, char *output)
{
int i, j, k = 0;
int flag;
int length;
//判断输入和输出数组是否有值
if(input == NULL || output == NULL)
{
return -1;
}
length=strlen(input);//求数组的长度
for(i = 0; i<length; i++)
{
flag = 1;
for(j = 0; j < i; j++)
{
if(output[j] == input [i])
flag = 0;
}
if(flag)
output[k++] = input[i];
}
printf("ountput:\n");
output[k] = '\0';
puts(output);
return 0;
}
int main()
{
char str_input[10];
char str_output[10]={"0"};
printf("please input:\n");
scanf_s("%s",str_input,10);
GetResult(str_input,str_output);
getchar();
getchar();
}
结果: