c语言数组元素判断是否相同以及相同的个数
一个一维数组,输入从小到大排列的6个数字,判断其中元素中最大的相同个数以及相同的项。比如说输入:134577,输出:x[5],x[6],相同数=2。输入:155589,输...
一个一维数组,输入从小到大排列的6个数字,判断其中元素中最大的相同个数以及相同的项。
比如说
输入:1 3 4 5 7 7,输出:x[5],x[6],相同数=2。
输入:1 5 5 5 8 9,输出:x[2],x[3],x[4],相同数=3。
输入:4 4 6 6 6 6,输出:x[3],x[4],x[5],x[6],相同数=4。 展开
比如说
输入:1 3 4 5 7 7,输出:x[5],x[6],相同数=2。
输入:1 5 5 5 8 9,输出:x[2],x[3],x[4],相同数=3。
输入:4 4 6 6 6 6,输出:x[3],x[4],x[5],x[6],相同数=4。 展开
展开全部
// 下面的算法还可以优化,就留给楼主自己思考:
#include <stdio.h>
#include <stdlib.h>
#define ARR_MAX 6
static int temp[ARR_MAX];
bool temp2[ARR_MAX];
void reset(){ // 初始化静态区变量 temp与temp2
for (int i=0;i<ARR_MAX;i++){
temp[i]=1;
temp2[i]=true;
}
}
int repeat_e(int a[ARR_MAX]){
reset();
// 跳跃式算法,加快检索速度
for (int i=0;i<ARR_MAX;i++){
if(!temp2[i]) continue;
for (int j=i+1;j<ARR_MAX;j++){
if (a[i]==a[j]){
temp[i]++;
temp2[j]=false;
}
}
}
// 寻找最值算法
int _max=1;
int target_index=-1; // 目标索引
for(int i=0;i<ARR_MAX;i++) {
if(temp[i]>_max){
_max=temp[i];
target_index=i;
}
}
return target_index>-1?a[target_index]:-1;
}
int main(int argc, char* argv[])
{
int arr[ARR_MAX]={0};
scanf("%d %d %d %d %d %d",&arr[0],&arr[1],&arr[2],&arr[3],&arr[4],&arr[5]);
int target_value=repeat_e(arr);
if(target_value>-1){
int _count=0;
for(int i=0;i<ARR_MAX;i++){
if(arr[i]==target_value) {
printf("x[%d],",i+1);
_count++;
}
}
printf("\b ,相同数=%d\n",_count);
}
system("pause");
return 0;
}
展开全部
不知道你想过这个问题没有:当相同的数中相同个数的最大值是相等的!
比如说有一组数据:4 4 4 6 6 6
相同数位3 可是相同的却有两组了!
楼下的代码只能解决没有相同的最大值的情况!
我必须的说考虑问题不严谨!
不过要是存在相同的数最大值有多组的情况就会复杂了!
相同的数的最大的个数可能有1个:也就是全都不相同的数如:1 2 3 4 5 6
相同的数的最大个数可能有2个:也就是 2 2 3 3 4 4
相同的数的最大个数可能有3个,也就是:2 2 2 3 3 3 4 4 4
...............这个问题看似简单却是在考验你逻辑思维的严谨性!
比如说有一组数据:4 4 4 6 6 6
相同数位3 可是相同的却有两组了!
楼下的代码只能解决没有相同的最大值的情况!
我必须的说考虑问题不严谨!
不过要是存在相同的数最大值有多组的情况就会复杂了!
相同的数的最大的个数可能有1个:也就是全都不相同的数如:1 2 3 4 5 6
相同的数的最大个数可能有2个:也就是 2 2 3 3 4 4
相同的数的最大个数可能有3个,也就是:2 2 2 3 3 3 4 4 4
...............这个问题看似简单却是在考验你逻辑思维的严谨性!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-04-09
展开全部
#include<stdio.h>
int search(int *apt,int n,int key)
{
int *p;
for(p=apt;p<apt+n;p++) //寻找特定元素
if(*p==key)
return p-apt;
return -1;
}
int b[]={90,80,70,60,50,40,772,294,1065,184};
int a[]={90,80,70,60,50,40,30,20,10,9,8,7,6,5,42,40,50,1,2,3}; //在这里定义的好处是,可以在任意函数中通用
main() //main拼错了
{
int i;
int c[sizeof(b)/sizeof(b[0])];
int q=0;
int d;
printf("The elements of array a is:\n"); //输出a数组中的元素
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
printf(" %d",a[i]);
}
printf("\n");
printf("The elements of array b is:"); //输出b数组中的元素
for(i=0;i<sizeof(b)/sizeof(b[0]);i++)
{
printf(" %d",b[i]);
}
printf("\n");
for(i=0;i<sizeof(b)/sizeof(b[0]);i++) //对b中数组的每一个数字都和a中的数字对比一次
{
int key;
key=b[i]; //关键字是b数组中第i个数字
d=search(a,sizeof(a)/sizeof(a[0]),key); //寻找关键字
if(d>-1)
{
c[q]=key; //这里要保存数组元素的值key,而不是数组下标d
q=q+1; //这句话应该放在后面,因为数组下标从0开始
}
}
printf("The number is:\n",q);
for(i=0;i<q;i++) //这里i的取值应该为i<q
printf(" %d",c[i]);
return 0;
int search(int *apt,int n,int key)
{
int *p;
for(p=apt;p<apt+n;p++) //寻找特定元素
if(*p==key)
return p-apt;
return -1;
}
int b[]={90,80,70,60,50,40,772,294,1065,184};
int a[]={90,80,70,60,50,40,30,20,10,9,8,7,6,5,42,40,50,1,2,3}; //在这里定义的好处是,可以在任意函数中通用
main() //main拼错了
{
int i;
int c[sizeof(b)/sizeof(b[0])];
int q=0;
int d;
printf("The elements of array a is:\n"); //输出a数组中的元素
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
printf(" %d",a[i]);
}
printf("\n");
printf("The elements of array b is:"); //输出b数组中的元素
for(i=0;i<sizeof(b)/sizeof(b[0]);i++)
{
printf(" %d",b[i]);
}
printf("\n");
for(i=0;i<sizeof(b)/sizeof(b[0]);i++) //对b中数组的每一个数字都和a中的数字对比一次
{
int key;
key=b[i]; //关键字是b数组中第i个数字
d=search(a,sizeof(a)/sizeof(a[0]),key); //寻找关键字
if(d>-1)
{
c[q]=key; //这里要保存数组元素的值key,而不是数组下标d
q=q+1; //这句话应该放在后面,因为数组下标从0开始
}
}
printf("The number is:\n",q);
for(i=0;i<q;i++) //这里i的取值应该为i<q
printf(" %d",c[i]);
return 0;
追问
我目前还没有学到指针,所以上面的代码有很多都看不懂,能麻烦你不用指针完成吗?谢谢了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询