洛谷-【入门3】循环结构——C语言

本文介绍了洛谷编程平台上的多个C语言题目,涵盖了找最小值、分类平均、数学问题如一尺之棰、数字直角三角形等,涉及循环结构在解决实际问题中的应用,适合初学者提升算法和逻辑思维能力。
摘要由CSDN通过智能技术生成

1.找最小值

题目描述
给出n和n个整数ai,求这n个整数中最小值是什么。

输入格式
第一行输入一个正整数n,表示数字个数。

第二行输入n个非负整数,表示a1,a2…an,以空格隔开。

输出格式
输出一个非负整数,表示这n个非负整数中的最小值。

#include <stdio.h>
int main(){
   
	unsigned int n,a,min;
	scanf("%u",&n);
	scanf("%u",&a);
	min=a;
	for(unsigned int i=1;i<n;i++){
   
		scanf("%u",&a);
		if(a<min){
   
			min=a;
		}
	}
	printf("%u",min);
	return 0;
}

输入 #1

8
1 9 2 6 0 8 1 7

输出 #1

0

2.分类平均

题目描述
给定n和k,将从1到n之间的所有正整数可以分为两类:A类数可以被k整除(也就是说是k的倍数),而B类数不能。请输出这两类数的平均数,精确到小数点后1位,用空格隔开。

数据保证两类数的个数都不会是0。

输入格式
输入两个正整数n与k。

输出格式
输出一行,两个实数,分别表示A类数与B类数的平均数。精确到小数点后一位。

#include <stdio.h>
int main(){
   
	unsigned int n,k,sum1=0,sum2=0,count1=0,count2=0;
	scanf("%u %u",&n,&k);
	for(unsigned int i=1;i<=n;i++){
   
		if(i%k==0){
   
			sum1+=i;
			count1++;
		}else{
   
			sum2+=i;
			count2++;
		}
	}
	printf("%.1f %.1f",1.0*sum1/count1,1.0*sum2/count2);
	return 0;
}

输入 #1

100 16

输出 #1

56.0 50.1

3.一尺之棰

题目描述
《庄子》中说到,“一尺之棰,日取其半,万世不竭”。第一天有一根长度为a的木棍,从第二天开始,每天都要将这根木棍锯掉一半(每次除2,向下取整)。第几天的时候木棍的长度会变为1?

输入格式
输入一个正整数a,表示木棍长度。

输出格式
输出一个正整数,表示要第几天的时候木棍长度会变为1。

#include <stdio.h>
#include <math.h>
int main(){
   
	unsigned int a,day=1;
	scanf("%u",&a);
	while(a!=1){
   
		a/=2;
		day++;
	}
	printf("%u\n",day);
	return 0;
}

输入 #1

100

输出 #1

7

4.数字直角三角形

题目描述
给出n,请输出一个直角边长度是n的数字直角三角形。所有数字都是2位组成的,如果没有2位则加上前导0。

输入格式
输入一个正整数n。

输出格式
输出如题目要求的数字直角三角形。

#include <stdio.h>
int main(){
   
	unsigned int n,count=0;
	scanf("%u",&n);
	for(unsigned int i=1;i<=n;i++){
   
		for(unsigned int j=n-i+1;j>=1;j--){
   
			if(count<9)
				printf("0%u",++count);
			else
				printf("%u",++count);
		}
		printf("\n");
	}
	return 0;
}

输入 #1

5

输出 #1

0102030405
06070809
101112
1314
15

5.阶乘之和

题目描述
用高精度计算出S=1!+2!+3!+⋯+n!(n≤50)。

其中!表示阶乘,定义为n!=n×(n−1)×(n−2)×⋯×1。例如,5!=5×4×3×2×1=120。

输入格式
一个正整数n。

输出格式
一个正整数S,表示计算结果。

#include<stdio.h>
int main()
{
   
    int i,A[1005]={
   0},B[1005]={
   0},n,j;
    scanf("%d", &n);
    A[0]=B[0]=1;
    for (i=2;i<=n;i++){
   
        for (j=0;j<100;j++)
            B[j]*=i;
        for (j=0;j<100;j++)
            if (B[j]>9){
   
                B[j+1] += B[j]/10;
                B[j]%=10;
            }
        for (j=0;j<100;j++){
   
            A[j]+=B[j];
            if (A[j]>9) {
   
                A[j+1] += A[j]/10;
                A[j]%=10;
            }
        }
    }
    for (i=100;i>=0&&A[i]==0;i--);
    for (j=i;j>=0;j--) printf("%d", A[j]);
    return 0;
}

输入 #1

3

输出 #1

9

6.计数问题

题目描述
试计算在区间1到n的所有整数中,数字x(0≤x≤9)共出现了多少次?例如,在1到11中,即在 1,2,3,4,5,6,7,8,9,10,11 中,数字1出现了4次。

输入格式
2个整数n,x,之间用一个空格隔开。

输出格式
1个整数,表示x出现的次数。

#include <stdio.h>
int main(){
   
	int n,x,count=0;
	scanf("%d %d",&n,&x);
	for(int i=1;i<=n;i++){
   
		int j=i,t;
		while(j>0){
   
			t=j;
			t%=10;
			if(t==x)count++;
			j/=10;
		}
	}
	printf("%d\n",count);
	return 0;
}

输入 #1

11 1

输出 #1

4

7.级数求和

题目描述
已知:Sn=1+1/2+1/3+…+1/n。显然对于任意一个整数k,当n足够大的时候,Sn>k。

现给出一个整数k,要求计算出一个最小的n,使得Sn>k。

输入格式
一个正整数k。

输出格式
一个正整数n。

#include <stdio.h>
int main(){
   
	unsigned int k,n=1;
	double S=0;
	scanf("%u",&k);
	while(S<=k){
   
		S+=(1.0/n);
		n++;
	}
	printf("%u",n-1);
	return 0;
}

输入 #1

1

输出 #1

2

8.金币

题目描述
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续n天每天收到n枚金币后,骑士会在之后的连续n+1 天里,每天收到n+1枚金币。

请计算在前k天里,骑士一共获得了多少金币。

输入格式
一个正整数k,表示发放金币的天数。

输出格式
一个正整数,即骑士收到的金币数。

#include <stdio.h>
int main(){
   
	unsigned int k,S=0,day=0;
	scanf("%u",&k);
	//1,2,2,3,3,3,4,4,4,4,5,5,5,5,5
	//1,2,3,4,5,6,7,8,9,10,11
	for(int i=1;day<k;i++){
   
		for( int j=1;j<=i;j++){
   
			S+=i;
			day++;
			if(day==k) break;
		}
	}
	printf("%d\n",S);
	return 0;
}

输入 #1

6

输出 #1

14

输入 #2

1000

输出 #2

29820

9.数列求和

题目描述

计算1+2+3+…+(n-1)+n 的值,其中正整数 n 不大于 100。由于你没有高斯聪明,所以你不被允许使用等差数列求和公式直接求出答案。

输入格式

输入一个正整数 n。

输出格式

输出一个正整数,表示最后求和的答案。

#include <stdio.h>
int main(){
   
	int n,sum=0;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
   
		sum+=i;
	}
	printf("%d",sum);
	return 0;
}

样例输入 #1

100

样例输出 #1

5050

提示

数据保证,1 <= n <=100。

10.质数口袋

题目描述
小 A 有一个质数口袋,里面可以装各个质数。他从2开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。
口袋的负载量就是口袋里的所有数字之和。
但是口袋的承重量有限,装的质数的和不能超过 L。给出 L,请问口袋里能装下几个质数?将这些质数从小往大输出,然后输出最多能装下的质数的个数,数字之间用换行隔开。

输入格式
一行一个正整数 L。

输出格式

将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。

#include <stdio.h>
int main(){
   
	int isprime(int n);
	int L,sum=0,count=0;
	scanf("%d",&L);
	for(int i=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值