C++有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。错哪了?

#include<stdio.h>
int main()
{
int a[11]={0,1,2,3,4,5,6,7,8,9};
int i,t,d,m;
scanf("%d",&t);
if(a[0]==t)
{
for(i=0;i<11;i++)
m=a[i+1];
a[i+1]=a[i];
a[m+2]=m;
}
if(a[9]==t)
a[10]=t;
if(a[i]==t)
{
d=i;
for(i=d+1;i<11;i++)
m=a[i+1];
a[i+1]=a[i];
a[m+2]=m;
}
if(a[i]<t&&a[i+1]>t)
{
a[i]=t;
d=i;
for(i=d+1;i<11;i++)
m=a[i+1];
a[i+1]=a[i];
a[m+2]=m;
}
if(a[i]>t&&a[i+1]<t)
{
a[i]=t;
d=i;
for(i=d+1;i<11;i++)
m=a[i+1];
a[i+1]=a[i];
a[m+2]=m;
}
for(i=0;i<11;i++)
printf("%d",a[i]);
}
我把结果分5个if 后两个if是升序和降序 前几个是==和<<, >>条件下 int d;是想记录if条件达成时a[i]的位置

楼主你的看不懂,我自己写了一份。
思路是这样的
输入一个t,把t跟数组里面的轮流数比较,只要找到满足的条件为:
1. t 比数组当前数小,同时比数组下一个数大。
2. t 比数组当前数大,同时比数组下一个数小。
因为楼主没有说过该数组是从小到大,还是从大到小。根据这两个条件,不论数组是怎么排列,该数t是插入到一个比它大,一个比它小这两个数中间。
int main()
{
int a[11]={0,1,2,3,4,5,6,7,8,9};
int tmp[11] = {0};
int t, i;
scanf("%d",&t);
for (i = 0; i < 10; i ++)
{
if ((a[i] >= t && a[i+1] <= t) || (a[i] <= t && a[i+1] >= t))
{
int j;
for (j = 0; j <= i; j ++)
{
tmp[j] = a[j];
}
tmp[j++] = t;
for (;j < 11; j ++)
{
tmp[j] = a[++i];
}
memcpy(a, tmp, sizeof(tmp));
break;
}
}
for(i=0;i<11;i++)
printf("%d",a[i]);
return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-02-16

一种简单的方案:

# include <stdio.h>
# include <algorithm>
using namespace std;

int main(int argc, char const *argv[])
{
int a[11]={0,1,2,3,4,5,6,7,8,9};
int t;

scanf("%d", &t);
a[10] = t;

sort(a, a+11);

for(int i = 0; i < 11; ++i)
{
printf("%d ", a[i]);
}
return 0;
}

 

这个稍微复杂一点,写的不好看,将就看一下吧:

# include <stdio.h>

int main(int argc, char const *argv[])
{
int i, j;
int a[11]={0,1,2,3,4,5,6,7,8,9};
int t;

scanf("%d", &t);

if(t>a[9])
a[10] = t;
else if(t<a[0])
{
for(j = 10; j > 0; --j)
{
a[j] = a[j-1];
}
a[0] = t;
}
else
{
for(i = 0; i < 9; ++i)
{
if(t>=a[i] && t<=a[i+1])
{
for(j = 10; j > i; --j)
{
a[j] = a[j-1];
}
a[i+1] = t;
break;
}
}
}

for(i = 0; i < 11; ++i)
{
printf("%d ", a[i]);
}

return 0;
}

追问

int argc, char const *argv[]
大神这句看不懂
我一把他删除就不能输入了?
换个呗

追答

这个不用加的,只不过是编辑器给我自动加上的,留空或者换成void完全没有问题,

本回答被提问者采纳
相似回答