第四天坚持学习

这篇博客包含四个编程题目,分别是找出0-999之间的所有水仙花数,计算特定数字的数列前五项之和,模拟三次密码输入的场景,以及在有序数组中使用二分查找法寻找目标数字。通过这些题目,读者可以练习C语言的基础知识和算法应用。
摘要由CSDN通过智能技术生成

第一题 求出0~999之间的所有“水仙花数”并输出。

首先要了解什么是水仙花数,水仙花数就是在数论中,水仙花数也称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数,是指一N位数,其各个数之N次方和等于该数。
例如153、370、371及407就是三位数的水仙花数,其各个数之立方和等于该数:
153 = 1^3 + 5^3 + 3^3。
370 = 3^3 + 7^3 + 0^3。
371 = 3^3 + 7^3 + 1^3。
407 = 4^3 + 0^3 + 7^3。

int main()
{
	int i, j, k, n;
	printf("0-999之间的水仙花数有:");
	for (n = 0; n <= 999; n++)
	{
		if (n < 10)//0-10
		{
			printf("%d\n", n);
		}
		else if (n < 100)//10-99
		{
			i = n / 10;
			j = n % 10;
			if (n == i*i + j*j)
			{
				printf("%d\n", n);
			}
				
		}
		else//100-999
		{
			i = n / 100;
			j = (n - i * 100) / 10;
			k = n - i * 100 - j * 10;
			if (n == i*i*i + j*j*j + k*k*k)
			{
				printf("%d\n", n);
			}
		}
	}
	
	return 0;
}

第二题 求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字。

int main()
{ 
	int i = 0;
	int sn = 0;
	int t = 0;
	int a,n;
	printf("输入a的值和n的次数:");
	scanf("%d %d", &a,&n);
	for (i = 0; i <n; i++)
	{
		t = t + a;
		a = a * 10;
		sn = sn + t;
	}
	printf("sn的值:%d\n", sn);
	return 0;
}

第三题 编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误,可以重新输入,最多输入三次。三次均错,则提示退出程序。

在写这个程序时要注意的是“==”是不能用来比较两个字符串是否相等的,必须使用一个库函数strcmp。

int main()
{
	char password[10] = { 0 };
	int i = 0;
	for (i = 0; i <3; i++)
	{
		printf("请输入密码:");
		scanf("%s", password);
		if (strcmp(password ,"123456")==0)
		{
			printf("登陆成功!\n");
			break;
		}
		else
		{
			printf("密码错误\n");
		}

	}
	if (i == 3)
		printf("三次密码均错误,请退出程序\n");

	return 0;
}

第四题 写代码可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1。

本题可以使用二分查找的方法,先对给定的数组求长度,数组的最左边就是下标为0的地方,最右边下标就是数组的长度sz-1。判断只有当数组的左边小于右边时才能进行下一步查找,因为数组的大小是从左往右从小到大,然后定义一个数组的中下标为mid=(left+right)/2,判断当这个中间下标大于我们要找的那个数k的下标时(arr[mid]>k),所以right=mid-1,同理当arr[mid]<k时,left=mid+1。

int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int k;
	printf("输入一个要查找的数:");
	scanf("%d", &k);
	int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0;
	int right = sz - 1;
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else
		{
			printf("找到了,下标是:%d\n", mid);
			break;
		}
	}
	if (left = right)
		printf("%d\n", -1);
	return 0;

}

ps:昨天亲戚店要开张,去做了一天的苦力,晚上回去洗洗倒头就睡了,今天就多学一会,多做一题,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值