评论

收藏

[C++] 曾经破防的一天,但现在永怀希望

编程语言 编程语言 发布于:2021-12-17 10:36 | 阅读数:351 | 评论:0

C语言  好难啊  自己快要不行了 但是还是要坚持
学习ING:
1.初始化数组时,一定要确保数组的长度  如果数组的长度位置,那么只相当于定义了arr[1]的初值;
//一定要好好坚持,把C语言变成自己的一项本领,让编程充满自己的生活,加油,相信自己,既然选择了远方,便只顾风雨兼程。
2.自己尝试编一些编程题   如那种虫子吃苹果之类的并给出自己的源代码  然后不断地修改。
3.呜呜 ,破防了 。 一道以前做过的题特简单 ,但是想了几个小时 ,没有想出来好难受  ,C语言 这玩意搞得人好烦啊。还有许多作业没写完,还想做一下高数和线性代数搞得都没心情了,不知道这玩意怎么上去啊。
/////////////////////////////////////////////////////////////////////////////////
​简单谈一下 插入排序法(只适合于原数列有序)
想象一下,如果你要将有一个N个数的数列,你要将一个数插入到这个N个数并且有序的数列,你的思路是什么?
或许,这个问题有很多解法,留到将来再讨论
在此先谈一下鄙人一小白的想法,我肯定要先找到这个数以后会放在哪,所以肯定会有一个判断语句,那么是这个数大于数组(数列)中的数,还是小于数组中的数呢,在我刚开始的时候,我在if语句中一直是在这个数(后面就称X)大于数组中的一个数时,然后做一个循环,循环暂时先不谈论;
回到刚才所谈论地问题,现在想想,如果按照这个数大于数组中的数来判断的话,那么下面的循环应该是将这个数要插入在数组的位置前的数向前移,这我反正是不知道怎么实现,所以这明显是一种不符合逻辑的东西,如果有小伙伴也遇到了此类困惑欢迎讨论;
好了,接下来就到这个循环怎样搞了,在我们做出正确的判断语句后,相当于是我们将这个插入的数往后挪,有时候感觉数形结合是一种非常好的办法,由于本人计算机水平有限,所以就使用拍照的方式了;
假如说一组数 1 2 4 5 6 7中插入一个3,然后得到1 2 3 4 5 6 7
DSC0000.png
就是判断语句执行后,4 5  6 7整体后移,将空下的位置赋值X,然后退出循环
DSC0001.png
当然整个这些操作前面都要加上for语句,将每个数都与X比较;
代码奉上:
#include<stdio.h>
int main()
{
    int n,i;
    int flag=0;
    scanf("%d",&n);
    int arr[1000]={0};
    for(int i=0;i<n;i++)
    {
        scanf("%d",&arr);
    }
    int x;
    scanf("%d",&x);
    for( i=0;i<n;i++)
    {
        if(x<arr)
        {
            for(int j=n-1;j>=i;j--)//插入排序中将要插入数之后的位置整体后移
            {
                arr[j+1]=arr[j];
            }
            arr=x;
            flag++;
            break;
        }
    }
    if(flag==0)
        arr[n]=x;
    for( i=0;i<n+1;i++)
    {
        printf("%d ",arr);
    }
    return 0;
}
(ps:要考虑这个不输入整数的情况,但是我个人觉得这代码就是在人有需要的时候用啊,不输入数,感觉只是为了做题,但还是分xiang)











关注下面的标签,发现更多相似文章