牛客网初阶练习(终篇)

x33g5p2x  于2022-02-16 转载在 其他  
字(2.0k)|赞(0)|评价(0)|浏览(101)

1.小乐乐与字符串

2.KiKi去重整数并排序

方法一:

方法二:

35.KiKi学结构体和指针

1.小乐乐与字符串

#include<stdio.h>
int main()
{
    char arr[8000] = {0};
    scanf("%s",arr);
    long c = 0;
    long ch = 0;
    long chn = 0;
    char *p = arr;
    while(*p!='\0')
    {
        if(*p=='C')
        {
            c++;
        }
        else if(*p=='H')
        {
            ch+=c;
        }
        else if(*p=='N')
        {
            chn+=ch;
        }
        p++;
    }
    printf("%lld",chn);
    return 0;
}

2.KiKi去重整数并排序

方法一:

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

方法二:

#include<stdio.h>
void bubble_sort(int arr[], int n)
{
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = 0; j < n - i - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}
int main()
{
	int arr[1000] = { 0 };
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	bubble_sort(arr, n);
	for (i = 0; i < n - 1; i++)
	{
		if (arr[i] == arr[i + 1])
		{
			int k = 0;
			for (k = i; k < n - 1; k++)
			{
				arr[k] = arr[k + 1];
			}
			n--;
			i--;
		}
	}
	for (i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

35.KiKi学结构体和指针

#include<stdio.h>
#include<malloc.h>
struct Node
{
    int num;
    struct Node* next;
};
int main()
{
    int n = 0;
    scanf("%d",&n);
    int i = 0;
    int m = 0;
    int d = 0;//要删除的元素
    struct Node* list = NULL;//指向链表的指针
    struct Node* tail=NULL;//指向链表尾部元素的指针
    for(i = 0;i<n;i++)
    {
        scanf("%d",&m);
        struct Node*pn = (struct Node*)malloc(sizeof(struct Node));
        pn->num = m;
        pn->next = NULL;
        if(list==NULL)
        {
            list = pn;
            tail = pn;
        }
        else
        {
            tail->next = pn;
            tail = pn;
        }
    }
    //接收要删除的元素
    scanf("%d",&d);
    //删除列表中指定的元素
    struct Node* cur = list;
    struct Node* prev = NULL;
    while(cur)
    {
        if(cur->num==d)
        {
            //删除
            struct Node*pd = cur;
            if(cur==list)
            {
                list = list->next;
                cur = list;
            }
            else
            {
                prev->next = cur->next;
                cur = prev->next;
            }
            free(pd);
            n--;
        }
        else
        {
            prev = cur;
            cur = cur->next;
        }
    }
    //
    printf("%d\n",n);
    cur = list;
    while(cur)
    {
        printf("%d ",cur->num);
        cur = cur->next;
    }
    //释放单链表
    cur = list;
    struct Node*del = NULL;
    while(cur)
    {
        del = cur;
        cur = cur->next;
        free(del);
    }
    list = NULL;
    return 0;
}

相关文章