前言:
博主报名了一个小比赛,用来写一些基础的C语言题目,正好借此巩固一下基础
希望这些题对你们也有帮助
猫猫跟你说:该学习了
目录
前言:
题目( 1 )
解题思路
题目( 2 )
解题思路
题目( 3 )
解题思路
题目( 4)
解题思路
题目( 5 )
解题思路
题目( 6 )
解题思路
题目讲解结束,方法讲解开始!!!!
方法讲解(一)冒泡排序
题目( 1 )
题目描述
有一堆煤球,堆成三角棱锥形。具体: 第一层放 1
个, 第二层 3
个(排列成三角形), 第三层 6
个(排列成三角形), 第四层 10
个(排列成三角形), .... 如果一共有 N
层,共有多少个煤球?
输入格式 一个整数n,表示有多少层 (0<n<10000)
。
输出格式 一个整数,表示第
N 层有多少煤球。
输入输出样例
输入 30
输出 4960
#include<stdio.h>
int main()
{
int N;
int count=0;
int a=0;
scanf("%d",&N);
for(int b=0;b<N;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<stdio.h>
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<stdio.h>
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 <stdio.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
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,是因为前面的已经排好顺序了,重新遍历没有必要
如果有解释的不对或者不清晰,麻烦大佬们海涵,如果可以烦请从评论区指出,我一定会加以修改,万分感谢
最后麻烦大佬们动一下发财的小手一键三连,万分感谢