编程100题(3)

自幂数

题⽬描述:

写⼀个代码打印1~100000之间的所有的⾃幂数,中间⽤空格分隔。
⾃幂数是指⼀个数的位数的n次⽅等于这个数本⾝。例如,153是⾃幂数,
因为 1 ^ 3+5 ^ 3+3 ^ 3=153。
我们可以使⽤⼀个循环遍历 1~100000 并检查每个数是否为⾃幂数。

思路:

  1. 通过第一个while循环确定 i 为几位数(利用“/”)
  2. 通过第二个循环确定 i 是否为自幂数(利用“%”和“/”)
#include<stdio.h>
#include<math.h>

int main()
{
	int i = 0;
	for (i = 1; i < 100001; i++)
	{
		int a = i;
		int sum = 0;
		int n = 0;
		int b = 0;
		while (a)
		{
			a /= 10;
			n++;
		}
		a = i;
		while (a)
		{
			b = a % 10;
			sum += pow(b, n);
			a /= 10;
		}
		if (sum == i)
		{
			printf("%d ",i);
		}
	}
	printf("\n");
	return 0;
}

在这里插入图片描述

打印菱形

题⽬描述:

输⼊⼀个整数n,打印对应2*n-1⾏的菱形图案,⽐如,输⼊7,输出如下图案,图案总共13⾏
在这里插入图片描述
思路:

  1. 将这个图案分为两部分进行打印:第一部分为 1 ~ n 行,第二部分为 n+1 ~ 2n-1 行,单独进行一个for循环
  2. 第一部分和第二部分又分为两个部分:打印空白以及打印 “ * ”
  3. 打印空白的for循环嵌套在行的循环之中,打印 “ * ”的for循环也在行的循环中
  4. 接着便是寻找打印的规律即可实现程序
#include<stdio.h>

int main()
{
	int n = 0;
	scanf("%d",&n);
	int i = 0;
	for (i = 0; i < n; i++)
	{
		int j = 0;
		for (j = 0; j < n - i - 1; j++)
		{
			printf(" ");
		}
		for (j = 1; j <i*2+2; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	for (i = 0; i < n-1 ; i++)
	{
		int j = 0;
		for (j = 1; j <i+2; j++)
		{
			printf(" ");
		}
		for (j = 1; j <= ((2 * n - 3) - (2 * i)); j++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

在这里插入图片描述

喝多少瓶汽水

题⽬描述:

⽔已知1瓶汽⽔1元,2个空瓶可以换⼀瓶汽⽔,输⼊整数n(n>=0),表⽰n元钱,计算可以多少汽
⽔,请编程实现。

#include<stdio.h>

int main()
{
	int n = 0;
	scanf("%d",&n);
	int bottom = n;
	int empty = n;
	int a = n;
	while (empty !=0 && empty !=1)
	{
		a = a / 2;
		bottom += a;
		empty = empty % 2 + a;
		a = empty;
	}
	printf("可以喝%d瓶汽水\n",bottom);
	return 0;
}

在这里插入图片描述

字符转换

题⽬描述:

输⼊⼀个字符串,将字符串中⼤写字⺟全部转为⼩写字⺟,⼩写字⺟转成⼤写字⺟,其他字符保持不变。注:字符串的⻓度小于等于30,其中字符串中包含空格。

#include<stdio.h>
#include<ctype.h>

int main()
{
	char str[30] = "";
	scanf("%[^\n]s", str);
	char* str1 = str;
	while (*str1)
	{
		if (islower(*str1))
		{
			*str1=toupper(*str1);
		}
		else if (isupper(*str1))
		{
			*str1=tolower(*str1);
		}
		str1++;
	}
	printf("%s\n", str);
	return 0;
}

在这里插入图片描述

交换两个整数

题⽬描述:

写⼀个函数Swap,可以交换两个整数的内容。注意必须实现成函数完成。 输⼊2个整数,调⽤⾃定义函数Swap,完成2个整数的交换。
测试1:
输⼊:3 5
输出:5 3
测试2:
输⼊:10 20
输出:20 10

思路:
该程序本身不难,只需注意:函数传参时只是一份临时拷贝,在函数结束后便会销毁,因此需要传址而不是简单的传值

#include<stdio.h>
#include<assert.h>

void Swap(int* a, int* b)
{
	assert(a && b);
	int tmp = *a;
	*a = *b;
	*b = tmp;
}


int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d",&a,&b);
	Swap(&a,&b);
	printf("%d %d\n",a,b);
	return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值