牛客网编程题(一维数组)

1.小乐乐查找数字

代码如下:

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	int arr[101] = { 0 };
	for (i = 0; i < n; i++)
	{
	   scanf("%d ", &arr[i]);
	}
	int k = 0;
	scanf("%d", &k);
	int count = 0;
	for (i = 0; i < n; i++)
	{
		if (arr[i] == k)
		{
			count++;
		}
	}				
	printf("%d\n", count);
	return 0;
}

`

2.有序序列插入一个整数

代码如下:

#include <stdio.h>
int main() 
{
    int n = 0;
    int a[20] = { 0 };
    int m = 0;
    int i = 0;
    //输入第一行
    scanf("%d", &n);
    //循环输入第二行
    for (i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    //第三行
    scanf("%d", &m);
    //从后面开始找如果找到比m大的继续往前找
    for (i = n - 1; i >= 0; i--) {
        if (a[i] > m) {
            a[i + 1] = a[i];
        }
		else
		{
		    a[i + 1] = m; //如果前一项比m小,那么m就放在这里
            break;
		}
    }													 
    if (i < 0)	//还有一种情况就是一直找到最前面发现m都比其他的小,那么把第一个元素放m
	{  							 
        a[0] = m;
    }
    for (int i = 0; i < n + 1; i++) { //打印输出排序好的数组
        printf("%d ", a[i]);
    }
    return 0;
}

3.序列中整数去重

代码如下:

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[5000] = { 0 };
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (i = 0; i < n; i++)
	{
		int j = 0;
		for (j = i + 1; j < n; j++)
		{
			if (arr[i]== arr[j])
			{
				arr[j] = 0;    //把后边重复的元素为0。
			}
		}
	}
	for (i = 0; i < n; i++)
	{
		if (arr[i] != 0)
		{
			printf("%d ", arr[i]);
		}
	}
	return 0;
}

4.序列中删除指定数字

代码如下:

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[50] = { 0 };
	int i = 0;
	for (i = 0; i <n; i++)//遍历,打印每一个元素
	{
		scanf("%d ", &arr[i]);
	}
	int del = 0;
	scanf("%d", &del);
	for (i = 0; i < n; i++)
	{
		if (arr[i] == del) //将arr中等于del的整数都换成0
		{
			arr[i] = 0;
		}
	}
	for (i = 0;i < n; i++)	//打印
	{
		if (arr[i])			//碰到0不打印直接跳过
		{
			printf("%d ", arr[i]);
		}	
	}
	return 0;
}

5.逆序输出

代码如下:

#inclue <stdio.h>
void reverse(int arr[], int sz)
{
    int left = 0;
    int right = sz - 1;
    while (left < right)
    {
        int tmp = arr[left];
        arr[left] = arr[right];
        arr[right] = tmp;
        left++;
        right--;
    }
}
int main()
{
    int i = 0;
    int arr[10] = { 0 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    for (i = 0; i <10; i++)
    {
        scanf("%d ", &arr[i]);
    }
    //print(arr, sz);  //打印原来
    reverse(arr, sz);
    for (i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    //print(arr, sz);   //打印逆序
    return 0;
}

6.争夺前五名

代码如下:

#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    int i = 0;
    int arr[50]={0};
    for(i=0; i<n; i++)
    {
        scanf("%d", &arr[i]);
    }
    for(i=0;i<n-1;i++)
    {
        int j=0;
        for(j=0;j<n-i-1;j++)
        {
            if(arr[j]<arr[j+1])
            {
                int tmp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=tmp;    //先冒泡排序,在遍历数组,打印
            }
        }      
    }
    for(i=0;i<5;i++)
    {
       printf("%d ",arr[i]);  
    }
    return 0;
}

7.有序序列合并

代码如下:

 #include <stdio.h>
int main()
{
	int arr1[1000] = { 0 };
	int arr2[1000] = { 0 };
	int n = 0;
	int m = 0;
	scanf("%d %d\n", &n, &m);
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr1[i]);
	}
	for (i = 0; i < m; i++)
	{									  //1 3 5 7 9		j
		scanf("%d", &arr2[i]);			  //2 4 6 8 9 10	k
	}
	int j = 0;
	int k = 0;
	while (j < n && k < m)
	{
		if (arr1[j] < arr2[k])
		{
			printf("%d ", arr1[j]);
			j++;
		}
		else
		{
			printf("%d ", arr2[k]);
			k++;
		}
	}
	//要判断哪一个数组先打印完
	if (j < n)		   //遍历,剩余元素直接打印
	{
		for (; j < n; j++)
		{
			printf("%d ", arr1[j]);
		}
	}
	else
	{
		for (; k < m; k++)
		{
			printf("%d ", arr2[k]);
		}
	}
	return 0;
}

8. 筛选法求素数

代码如下:

#include <stdio.h>
int main()
{
	int n = 0;
	int count = 0;
	int arr[100] = { 0 };
	while (scanf("%d", &n) != EOF)
	{
		int i = 0;
		for (i = 2; i <=n; i++)
		{
			arr[i] = i;
		}
		//开始筛选
		for (i = 2; i <=n; i++)
		{
			int j = 2;
			for (j = 2; j < i; j++)
			{
				if (i % j == 0)
				{
					arr[i] = 0;
				}
			}
		}
		for (i = 2; i <=n; i++)
		{
			if (arr[i] != 0)
			{
				printf("%d ", arr[i]);
			}
			else
			{
				count++;  
			}
		}
		printf("\n");
		printf("%d", count);
	}
	return 0;
}

9. 小乐乐查找数字

代码如下:

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	int arr[101] = { 0 };
	for (i = 0; i < n; i++)
	{
	   scanf("%d ", &arr[i]);
	}
	int k = 0;
	scanf("%d", &k);
	int count = 0;
	for (i = 0; i < n; i++)
	{
		if (arr[i] == k)
		{
			count++;
		}
	}				
	printf("%d\n", count);
	return 0;
}

10.有序序列判断

代码如下:

#include<stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    int i = 0;
    int tmp1 = 0;
    int tmp2 = 0;
    int arr[55] = { 0 };
    for (i = 0; i < n; i++)
    {
        scanf("%d ", &arr[i]);
    }
    for (i = 0; i < n; i++)
    {
       if(i>0)
        {
          if (arr[i] > arr[i - 1])
        {
           tmp1 = 1;
        }
        else
        {
            tmp2 = 1;
        }
        }
    }
    if (tmp1+tmp2 == 1) //升序,降序只能一种,所以是1。
    {
        printf("sorted");
    }
    else
        printf("unsorted");
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值