每天一练——C语言练习(4)

不要懒!不要停! 坚持刷题!

每天一练——C语言练习(4)_第1张图片

目录

1.计算:1/2+1/4+……+1/n,设n是由键盘输入的正偶数。

2.计算:1/1+1/3+……+1/n,设n是由键盘输入的正奇数。

3.从终端输入3个数a、b、c,按从大到小的顺序输出。

4. 公安人员审问四名窃贼嫌疑犯


1.计算:1/2+1/4+……+1/n,设n是由键盘输入的正偶数。

#include
int main()
{
	int n;
	scanf("%d", &n);
	double sum = 0.0;
	for (int i = 2; i <= n; i++)
	{
		if (i % 2 == 0)
		{
			sum += 1.0/i;
		}
	}
	printf("sum=%lf", sum);
	return 0;
}

输入一个偶数,n看做大小。用  i  判断是否是偶数(i%2==0)余0就是偶数。

一开始是二分之一,所以i的初始值是2。

2.计算:1/1+1/3+……+1/n,设n是由键盘输入的正奇数。

#include
int main()
{
	int n;
	scanf("%d", &n);
	double sum = 0.0;
	for (int i = 1; i <= n; i++)
	{
		if (i % 2 == 1)
		{
			sum += 1.0/i;
		}
	}
	printf("%lf", sum);
	return 0;
}

输入一个奇数,n看做大小。用  i  判断是否是奇数(i%2==1)余1就是奇数。

一开始是一分之一(就是1),所以i的初始值是1。

3.从终端输入3个数a、b、c,按从大到小的顺序输出。

//第一种方法按位异或
#include
int main()
{
	int a, b, c;
	scanf("%d %d %d", &a, &b, &c);
	if (a < b)
	{
		a = a ^ b;
		b = a ^ b;
		a = a ^ b;
	}
	else if (a < c)
	{
		a = a ^ c;
		c = a ^ c;
		a = a ^ c;
	}
	else if (b < c)
	{
		b = b ^ c;
		c = b ^ c;
		b = b ^ c;
	}
	printf("a=%d,b=%d,c=%d\n", a, b, c);
	return 0;
}

 

//第二种方法加减法
#include
int main()
{
	int a, b, c;
	scanf("%d %d %d", &a, &b, &c);
	if (a < b)
	{
		a = a + b;
		b = a - b;
		a = a - b;
	}
	else if (a < c)
	{
		a = a + c;
		c = a - c;
		a = a - c;
	}
	else if (b < c)
	{
		b = b + c;
		c = b - c;
		b = b - c;
	}
	printf("a=%d,b=%d,c=%d\n", a, b, c);
	return 0;
}

 

//第三种方法变量法
#include
int main()
{
	int a, b, c;
    int tmp;
	scanf("%d %d %d", &a, &b, &c);
	if (a < b)
	{
		tmp=a;
        a=b;
        b=tmp;
	}
	else if (a < c)
	{
		tmp=a;
        a=c;
        c=tmp;
	}
	else if (b < c)
	{
		tmp=b;
        b=c;
        c=tmp;
	}
	printf("a=%d,b=%d,c=%d\n", a, b, c);
	return 0;
}

比大小有三种方法

按位异或^ :按位异或用的是二进制的方法,也是最高效的

加减法加减法有一定的范围,如果是超大值会溢出

第三个变量变量也比较常用的方式。

看自己个人喜好,如果都会那是最好的!!!

4.  公安人员审问四名窃贼嫌疑犯。

已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎的。在回答公安人员的问题中:


// 甲说“乙没有偷,是丁偷的”,  
// 乙说“我没有偷,是丙偷的”,
// 丙说“甲没有偷,是乙偷的”,
// 丁说“我没有偷”。
// 请根据这四人的答话判断谁是盗窃者。

#include
//a=甲   b=乙  c=丙  d=丁
int main()
{
	char ch;
	for (ch = 'a'; ch <= 'd'; ch++)
	{
		if((ch!='b')+(ch=='d')!=1&&(ch!='b')+(ch=='c')!=1&&(ch!='a')+(ch=='b')!=1&&(ch!='d'))
			break;
	}
	printf("%c", ch);
	return 0;
}

这个是一个逻辑问题我们来捋一下

 题目所说:

要么每个人都是诚实的(意思是全部为真话)

要么总有人说假话(意思是全部是假话)

先从甲为例(没有偷我们用    !=       偷了我们用    ==)

 ch !=' b '+ ch==' d ' !=1

把甲乙丙丁说的话用&&串起来,利用for循环遍历一次就可以找到小偷了

今天的分享就到这里啦!

看了这么久点个关注吧!你的肯定是我最大的动力,每天都会分享小题目哦!~

我是Try_harder,正在磕磕绊绊中成长~~

每天一练——C语言练习(4)_第2张图片

你可能感兴趣的:(c语言)