前言:
博主报名了一个小比赛,用来写一些基础的C语言题目,正好借此巩固一下基础
希望这些题对你们也有帮助
猫猫跟你说:该学习了
目录
题目描述
有一堆煤球,堆成三角棱锥形。具体: 第一层放 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
- {
- //每层有几个煤球
- count=count+(b+1);
- //从第一层开始相加,一直加到(N-1)层(因为从第0层开始计数,所以到N-1层)
- a=a+count;
- }
- printf("%d",a);
- }
解题思路
博主找规律得出每一层的求法,利用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 = 4
, m! = 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 )
题目描述
现在给出两种硬币,它们的价值为 A
和 B
,它们满足 GCD(A,B)=1
。在这里,你可以假设这两种货币都有足够的硬币。请计算您不能支付的最大值和您不能支付的总数。
输入格式 输入包含两个整数 A
和 B
,含义如题目描述所示。 整数之间以空格间隔。
输出格式 针对输入,打印出不能支付的最大值和不能支付的总数。 整数之间以空格间隔
输入输出样例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,是因为前面的已经排好顺序了,重新遍历没有必要
如果有解释的不对或者不清晰,麻烦大佬们海涵,如果可以烦请从评论区指出,我一定会加以修改,万分感谢
最后麻烦大佬们动一下发财的小手一键三连,万分感谢