习题集(喝汽水、自幂数、打印菱形、Sn)

喝汽水

原题:喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给10元,可以喝多少汽水

 c6b37729057049a3a52c072593ab492e.png

用十元钱购买十瓶饮料,现在一共有十瓶饮料,喝完之后得到十个空瓶,十个空瓶兑换五瓶饮料,现在一共有五瓶饮料,喝完得到五个空瓶,然后用四个空瓶兑换两瓶饮料,现在一共有两瓶饮料和一个空瓶,喝完之后得到两个空瓶,现在一共有三个空瓶,拿出两个空瓶兑换一瓶饮料,现在一共有一瓶饮料和一个空瓶,喝完之后得到一个空瓶,现在一共有两个空瓶,用这两个空瓶兑换一瓶饮料。所以可以喝的饮料的数量就是钱+空瓶子除以2 。

int main()
{
    int money;
    scanf("%d", &money);

    int total = money;//喝饮料的数量
    int empty = money;//空瓶子数量

    while (empty > 1)
    {
        total = total + empty / 2;
        empty = empty / 2 + empty % 2;
    }
    printf("可以喝 %d 瓶饮料\n", total);
    return 0;
}

自幂数(水仙花数)

水仙花数,也被称为自幂数,是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。例如,153是一个水仙花数,因为153=1^3+5^3+3^3。水仙花数只是自幂数的一种,严格来说3位数的3次幂数才称为水仙花数。

 当我们要求1-100000之间的自幂数时,首先我们要用for循环遍历数字,然后判断这些数字是否是自幂数。

要判断自幂数时,首先要确定这个数是几位数。然后求每一个数字的每一位,然后合计判断是否满足条件。

int main()
{
    for (int i = 0; i <= 100000; i++)
    {
        int count = 0;
        int tmp = i;
        while (tmp != 0)//计算有多少个数字
        {
            count++;
            tmp /= 10;
        }
        tmp = i;
        int sum = 0;
        while (tmp != 0)//求一个数字的每一位
        {
            sum +=pow(tmp % 10,count);
            tmp /= 10;
        }
        if (sum == i)
        {
            printf("%d\n", i);
        }
    }
    return 0;
}

打印菱形

1dded4d2ef8c40a78fb37e3d43d553aa.png9c47d1a8f2394888a36a49ccf8cf8434.png

首先我们将这个菱形一分为二,现打印上半部分

    int a = 13;//a是总行数
	for (i = 0; i <= a/2; i++)
	{
		for (j = 0; j <= a/2-i; j++)
		{
			printf(" ") ;
		}
		for (n = 0; n < 2 * i - 1; n++)
		{
			printf("*");
		}
		printf("\n");
	}

再打印下半部分

for (i = 0; i <= a / 2; i++)
{
	for (j = 0; j < i; j++)
	{
		printf(" ");
	}
	for (n = 0; n < a - 2*i ; n++)
	{
		printf("*");
	}
	printf("\n");
}

 

Sn之和

求Sn = a + aa + aaa + aaaa + aaaaa的前5项之和,其中a是一个数字,
例如:输入2,计算2 + 22 + 222 + 2222 + 22222

 

int main()
{
    int n = 5;
    int a = 0;
    scanf("%d", &a);
    int tmp = 0;
    int sum = 0;
    for (int i = 0; i < n; i++)
    {
        tmp = tmp * 10 + a;
        sum += tmp;
    }
    printf("%d\n", sum);
    return 0;
}

99318b0ef4314bf887871287b24ef588.png

以上内容,如有问题,评论区留言或者私信。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值