小米oj记录——(五)找出旋转有序数列的中间值

描述
给出一个有序数列随机旋转之后的数列,如原有序数列为:[0,1,2,4,5,6,7] ,旋转之后为[4,5,6,7,0,1,2]。 假定数列中无重复元素,且数列长度为奇数。 求出旋转数列的中间值。如数列[4,5,6,7,0,1,2]的中间值为4。
输入
4,5,6,7,0,1,2
输出
4
输入样例

1
1,2,3
4,5,6,7,0,1,2
12,13,14,5,6,7,8,9,10

输出样例

1
2
4
9

代码:
例1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#include <ctype.h>
int main()
{
	int a[1000],d[1000];
	int count=0;
	int i,j,max,maxj;
	while(scanf("%d,",&a[count++]));		//while在条件满足时执行循环
											//将输入赋值到数组a[]中,scanf()函数返回的值的意义为:正确按指定格式输入变量的个数
	count--;
	for(i=0;i<=count/2;i++)
	{
		max=0;
		for(j=0;j<count;j++)
		{
			if(a[j]>max)
			{
				max=a[j];
				maxj=j;
			}
		}
		d[i]=max;a[maxj]=0;
	}
	printf("%d\n",d[count/2]);
}

例2

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#include <ctype.h>

int main()
{
    int i[1000],n,m,temp,l = 0;
    char c;
    scanf("%d",i);     //i变量本身就是数组的首地址,所以不加&
    c = getchar();
	while(c == ',')
    {
    	scanf("%d",&i[++l]);
        c = getchar();
    }
    for(n=0;n<=l;n++)					//以下为排序然后取中间值
    {
    	for(m=n;m<=l;m++)
        {
        	if(i[n]>i[m])
            {
            	temp = i[m];
                i[m] = i[n];
                i[n] = temp;
            }
        }
    }
    printf("%d\n",i[l/2]);
    return 0;
}

心得:

  1. scanf(“输入控制符”, 输入参数);
# include <stdio.h>
int main(void)
{
	int a[100];
    int i;
    scanf("%d%d", &i,a);  //&i 表示变量 i 的地址,&是取地址符    i本身就是数组的首地址,则不用加&
    printf("i = %d\n", i);
    return 0;
}
  1. 可以改进的方法:
    输入的数字个数未知,所以无法确定数组大小,可以先给数组分配一定的大小,当不够用时,再扩大分配空间。输入的数字个数未知,所以无法确定数组大小,可以先给数组分配一定的大小,当不够用时,再扩大分配空间。
    此时就用到了动态内存。使用动态内存很明显的好处就是:不需要预先分配存储空间且分配的空间可以根据程序的需要扩大或缩小,这样可以有效的使用内存空间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值