C语言刷题篇(备赛中......)--------( 篇章1 )

前言:

博主报名了一个小比赛,用来写一些基础的C语言题目,正好借此巩固一下基础

希望这些题对你们也有帮助

C语言刷题篇(备赛中......)--------( 篇章1 )_第1张图片猫猫跟你说:该学习了

目录

前言:

题目( 1 ) 

解题思路 

题目( 2 ) 

 解题思路 

题目( 3 )

解题思路 

题目( 4) 

解题思路 

题目( 5 ) 

解题思路 

题目( 6 )

解题思路  

题目讲解结束,方法讲解开始!!!!

方法讲解(一)冒泡排序


题目( 1 ) 

题目描述

有一堆煤球,堆成三角棱锥形。具体: 第一层放 1 个, 第二层 3 个(排列成三角形), 第三层 6 个(排列成三角形), 第四层 10 个(排列成三角形), .... 如果一共有 N 层,共有多少个煤球?

输入格式     一个整数n,表示有多少层 (0

输出格式    一个整数,表示第 N 层有多少煤球。

输入输出样例

输入   30 

输出   4960

#include
int main()
{
     int  N;
     int count=0;
     int a=0;
     scanf("%d",&N);
     for(int b=0;b

解题思路 

博主找规律得出每一层的求法,利用for循环进行求解,最后得出结果,进行验证


题目( 2 ) 

题目描述

输入一个整数 n,输出小于 n 并且能被 37 整除的所有自然数之和。 没有则输出 0

输入格式   一个整数。

输出格式   一个整数。

输入输出样例

输入 输出
38 37
75 111

说明/提示

如输入的值为75, 小于 75 并且能被 37 整除的自然数为 37 74。 即和为 37 + 74 = 111

#include
int main()
{
    int n;
    scanf("%d",&n);
    int a=37;
    int b=0;
    while(n>a)
    {
        b=a+b;
        a=a+37;
    }
    if(n<37)
    {
        printf(0);
    }
    printf("%d",b);
}

 解题思路 

题中说了小于n且能被37整除的数,我就投机取巧用a+37判断,利用while循环判断n与a+37的关系,如果n<=a的话,就离开while循环,输出


题目( 3 )

题目描述

x 的阶乘,即= x * (x-1) * (x-2) * ··· * 2 * 1。 输入一个整数 m,计算并输出其阶乘的值。

输入格式   一个整数

输出格式   一个整数

输入  4

输出  24

说明   m = 4m! = 4! = 4 * 3 * 2 * 1 = 24

提示   0 的阶乘为 1

#include
int main()

{
    int m;
    int sum=1;
    scanf("%d",&m);
    if(m>0)
    {
        for(int b=1;b<=m;b++)
          {
             sum=b*sum;
          }
    printf("%d",sum);
    }
    else
    {
        printf("%d",sum);
    }
}

解题思路 

求阶层的题应该都会吧,if 判断m的值,如果大于0进入for循环,然后用sum=sum*b就是最终的值


题目( 4) 

题目描述

本关任务:函数 fun 的功能是:将两个两位数的正整数 a、b 合并形成一个整数放在 c 中。合并的方式是:将 a 数的十位和个位数依次放在 c 数的十位和千位上,b 数的十位和个位数依次放在 c数的百位和个位上。

注意:请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 中填入你编写的若干语句

输入格式    整数 a、b

输出格式    计算得到的结果c

输入1         45 12

输出1         5142

#include 
long fun(int a,int b,long *c)
{
    int qianwei=a%10;
    int shiwei=a/10;
    int baiwei=b/10;
    int gewei=b%10;
    *c=qianwei*1000+baiwei*100+shiwei*10+gewei;
}
void main()
{	int a,b;
	long c;
	scanf("%d%d",&a,&b);
	fun(a,b,&c);
	printf("%ld\n",c);
}



解题思路 

求出每个数字所对应的位置,然后相乘


题目( 5 ) 

题目描述

猴子第一天摘下若干个桃子,当天吃了一半,后面又多吃一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。后面每天猴子都吃了前一天剩下的一半零一个。到第十天想再吃时,只剩下一个桃子。求第一天共摘了多少桃子。

输入格式   无。

输出格式   一个整数

#include
int main()
{
    int day=9;
    int taozi=1;
    while(day>0)
    {
        taozi=(taozi+1)*2;
        day--;
    }
    printf("%d",taozi);
    return 0;
}

解题思路 

从第9天开始,往回算直到day=0


题目( 6 )

题目描述

现在给出两种硬币,它们的价值为 AB,它们满足 GCD(A,B)=1。在这里,你可以假设这两种货币都有足够的硬币。请计算您不能支付的最大值和您不能支付的总数。

输入格式 输入包含两个整数 AB,含义如题目描述所示。 整数之间以空格间隔。

输出格式 针对输入,打印出不能支付的最大值和不能支付的总数。 整数之间以空格间隔

输入输出样例1

输入 2 3 输出 1 1

输入输出样例2

输入 3 4 输出 5 3

#include
int main()
{
    int A,B,count,c;
    scanf("%d %d",&A,&B);
    c=A*B-(A+B);
    count=(c+1)/2;
    printf("%d %d",c,count);
}

解题思路  

这道题的意思是,有无限个面值是A和B的硬币,求出这两个硬币不能支付的最大金额和不能支付的金额有几个

这个博主是通过找规律得出的


题目讲解结束,方法讲解开始!!!!

方法讲解(一)冒泡排序

两两相邻的元素进行比较,如果前面元素大于后面元素就交换两个元素的位置,最终的结果是最大的一个元素移动到了最后的位置, 这个过程为冒泡。如果有n个元素重复n-1次即可排序完成

#define _CRT_SECURE_NO_WARNINGS
#include
void bubble_sort(int arr[], int a)
{
    int i = 0;
    for (i; i < a-1; i++)
    {
        for (int j = 0; j < a -1- i; j++)
        {
            if (arr[j] > arr[j+1])
            {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
 
}
int main()
{
    int arr[] = { 9,7,4,3,2,8,6,1,5,0};
    bubble_sort(arr, sizeof(arr) / sizeof(arr[0]));
    int k = 0;
    for (k; k < (sizeof(arr) / sizeof(arr[0])); k++)
    printf("%d ", arr[k]);
    return 0;
}

注意:

1.第一个for循环是控制进行几次冒泡的,for循环的次数的是待排序序列元素个数减一次(博主最开始写的时候就写错了,忘记减一了)

2.第二个for循环是控制每一趟冒泡两两元素间进行比较的,j < a -1- i,是因为前面的已经排好顺序了,重新遍历没有必要

C语言刷题篇(备赛中......)--------( 篇章1 )_第2张图片

如果有解释的不对或者不清晰,麻烦大佬们海涵,如果可以烦请从评论区指出,我一定会加以修改,万分感谢

最后麻烦大佬们动一下发财的小手一键三连,万分感谢

你可能感兴趣的:(c语言,算法,开发语言)