一些初中数学题

/*
一小球从100米高空自由落下,
每次落地后反弹为原高度的一半
第十次落地是,共经过多少米
第十次反弹多高
*/

void test_37()
{
	double hight = 100;
	double lenth = 100;
	for (int i = 1; i <= 10; ++i)
	{
		hight = hight / 2;//每次反弹为原高度的一半
		lenth += hight * 2;
	}
	printf("第十次落地共经过%f米,\n第十次反弹%f米\n", lenth, hight);
}


/*
在100~999中查找符合如下条件的整数并输出:
这个数是完全平方数,并且又有两位数字相同
*/
void num_trans_char(int num,char *ch)
{
	for (int i = 0; num != 0; ++i)
	{
		ch[i] = num % 10;
		num = num / 10;
	}
}
void test_41()
{
	//10^2  ~  31^2
	char ch[3] = { 0 };//因为100~999都是三位数
	int num = 0;
	for (int i = 10; i < 32; ++i)
	{
		num = i*i;
		num_trans_char(num, ch);
		if (ch[0] == ch[1] || ch[0] == ch[2] || ch[1] == ch[2])//如果有两个数字相等
			printf("%d\n", num);
	}

}

/*
有这样一个六位数,它本身是一个整数的平方
其高三位和第三位也是一个整数的平方
例如225625=475^2,求满足上述条件的所有六位数
*/
void num_trans_char(int num, int *ch)
{
	int j = 5;
	for (int i = 0; num != 0; ++i,--j)
	{
		ch[j] = num % 10;
		num = num / 10;
	}
}
int ch_trans_num(int ch[])
{
	int num = 0;
	int len = sizeof(ch)/sizeof(ch[0]);
	for (int i = len - 1,j=0; i >= 0; --i,++j)
	{
		num += ch[i] * pow((double)10, j);
	}
	return num;
}
void test_42()
{//317^2      ~   1000^2
	// 10^2   ~  32~2
	int ch[6] = { 0 };
	int low = (int)sqrt((double)100000);
	int high = (int)sqrt((double)999999);
	int num = 0;
	int tmp1[3] = { 0 }, tmp2[3] = { 0 };
	
	
	for (++low; low < high; ++low)
	{
		bool flag = true;
		double num1 = 0, num2 = 0;
		num = (int)pow((double)low, 2);//得到一个六位数		
		num_trans_char(num, ch);//转换成数组
		int j = 0;
		for (int i = 0; i < 3; ++i,++j)
		{
			tmp1[i] = ch[j];
		}//得到前三位的数组
		{
			for (int i = 2, j = 0; i >= 0; --i, ++j)
			{
				num1 += tmp1[i] * pow((double)10, j);
			}
		}//转换成数字
		num1 = sqrt((double)num1);
		for (int i = 1; i < 32; ++i)//判断其是否能够完全开平方
		{
			if (num1 != i)
				flag = false;
			else
			{
				flag = true;
				break;
			}
				
		}
		if (flag == false)
			continue;
		for (int i = 0; i < 3; ++i, ++j)
		{
			tmp2[i] = ch[j];
		}//得到后三位的数组
		{
			for (int i = 2, j = 0; i >= 0; --i, ++j)
			{
				num2 += tmp2[i] * pow((double)10, j);
			}
		}//转换成数字
		num2 = sqrt((double)num2);
		for (int i = 1; i < 32; ++i)//判断其是否能够完全开平方
		{
			if (num2 != i)
				flag = false;
			else
			{
				flag = true;
				break;
			}
		}
		if (flag)
		{
			printf("%d\n", num);
		}
	}
}


有更简单的方法

void test_true_42()
{
	long i, n, n1, n2, n3, n4;
	for (i = 100000; i <= 999999; ++i)
	{
		n = (long)sqrt((double)i);
		if (i == n*n)//六位数是一个完全平方数
		{
			n1 = i / 1000;//高三位
			n2 = i % 1000;//低三位
			n3 = (long)sqrt((double)n1);
			n4 = (long)sqrt((double)n2);
			if (n1 == n3*n3&&n2 == n4*n4)
			{
				printf("%d\n", i);
			}
		}
	}
}

/*
求等差数列
幼儿园老师给学生发糖果 又前往后的糖果数量成等差数列
前四个学生的糖果数目之和是26  之积是880
前前二十个等差数列
*/
void test_43()
{
	int candy[20] = { 0 };
	int first = 0, count = 0;
	int n1, n2, n3, n4;
	for (int i = 0; i < 26; ++i)//暴力遍历
	{
		for (int j = 1; j < 20; ++j)
		{
			n1 = i;
			n2 = n1 + j;
			n3 = n2 + j;
			n4 = n3 + j;
			if (((n1 + n2 + n3 + n4) == 26) && (n1*n2*n3*n4) == 880)
			{
				first = i;
				count = j;
			}
		}
		
	}
	for (int i = 0; i < 20; ++i)
	{
		printf("%d\t", first + (count*i));
	}
}


/*
自守数指的是一个数的平方的尾数等于该数自身
比如25^2=625
求10000以内的所有自守数
*/
void num_trans_ch(int num, int *ch)
{
	for (int i = 0; num != 0; ++i)
	{
		ch[i] = num % 10;
		num = num / 10;
	}
}
void test_45()
{
	int ch[10] = { 0 };
	for (int x = 0; x < 1000; ++x)
	{	
		int num = x*x;	
		num_trans_ch(num, ch); 
		int wei=0;
		if (x / 100 != 0)//3位数
		{
			for (int i = 0; i < 3; ++i)//取尾数
			{
				wei += ch[i] * pow((double)10, i);
			}
		}
		else if (x / 10 != 0)//2
		{
			for (int i = 0; i < 2; ++i)
			{
				wei += ch[i] * pow((double)10, i);
			}
		}
		else if (x / 1 != 0)//1
		{
			for (int i = 0; i < 1; ++i)
			{
				wei += ch[i] * pow((double)10, i);
			}
		}
		if (wei == x)
			printf("%d*%d=%d\n", x, x, num);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值