两道笔试编程题(求水仙数和求平方根数组之和)

第一道是求水仙数的问题,在规定范围内,求得;

这道题目还有要求输入测试用例时的格式,一组两对的输入格式。另外一个考点是求一个数的每一位;详细见代码:

// shuixianhuashu.cpp : 定义控制台应用程序的入口点。
/*
	题目是求特定范围内的水仙数,例如100<=m<=n<=999
	@midhidemudong
	@2015-8-10-21:24
*/
//

#include "stdafx.h"
int main()
{
	unsigned m1 = 100, n1 = 100, m2 = 100, n2 = 100;
	printf("please input two groups Numbers m and n,conditions that 100<=m<=n<=999\n");
	//下面两个while循环的作用就是能够读入两行输入,每行两个数据,并以空格隔开。根据题目要求,称之为两对一组数据;
	while (scanf_s("%d %d", &m1, &n1)) //先读入两个数据
	{
		char ch = getchar();							//在读入一个回车键,表示一行结束;
		if (ch == '\n')
			break;
	}
	while (scanf_s("%d %d", &m2, &n2))
	{
		char ch = getchar();
		if (ch == '\n')
			break;
	}
	unsigned temp[10];
	bool Find1 = false, Find2 = false;
	int count = 0;
	for (unsigned i = m1; i <= n1; i++)
	{
		int a = 0, b = 0, c = 0;

		a = i / 100;											//如何求一个整数各位上的数?最高位是原数除以10^n
		b = i / 10 - a * 10;								//次高位可以是:除以10余10,b=(i/10)%10;
		c = i - a * 100 - b * 10;							//这种方法也可以,而且没有除法和余运算;
		if (i == (a*a*a + b*b*b + c*c*c))
		{

			temp[count++] = i;
			Find1 = true;
		}
	}
	if (Find1)
	{
		for (int i = 0; i < count; i++)
			printf("%d ", temp[i]);
		printf("\n");
	}
	else
		printf("no\n");
	for (unsigned i = m2; i <= n2; i++)
	{
		int a = 0, b = 0, c = 0;

		a = i / 100;
		b = i / 10 - a * 10;
		c = i - a * 100 - b * 10;
		if (i == (a*a*a + b*b*b + c*c*c))
		{

			temp[count++] = i;
			Find2 = true;
		}
	}
	if (Find2)
	{
		for (int i = 0; i < count; i++)
			printf("%d ", temp[i]);
		printf("\n");
	}
	else
		printf("no\n");
	return 0;
}

第二题是求一个数组的各元素之和。第一个元素是用户输入元素,第二个元素分别是前一个数的平方根。数组大小也是用户输入决定的,例如用户输入81 4\n2 2\n,那么输出为94.73\n3.41

不多说了,详细看代码:

// shulieqianNxianghe.cpp : 定义控制台应用程序的入口点。
/*
	@mishidemudong
	@2015-8-10-21:37
*/
//

#include "stdafx.h"
#include"math.h"
float SumArray(int n, int m)
{
	double *temp = new double[m];
	temp[0] = n;	
	double sum = temp[0];
	for (int i = 1; i < m; i++)
	{
		temp[i] = sqrt((double)temp[i - 1]);	
		sum += temp[i];
	}
	delete[]temp;
	return sum;
}
int _tmain(int argc, _TCHAR* argv[])
{
	int n1, m1;
	while (scanf_s("%d %d", &n1, &m1))
	{
		char ch = getchar();
		if (ch == '\n')
			break;
	}
	int n2, m2;
	while (scanf_s("%d %d", &n2, &m2))
	{
		char ch = getchar();
		if (ch == '\n')
			break;
	}
	printf("%.2f\n%.2f", SumArray(n1, m1), SumArray(n2,m2));
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值