C语言习题01(折半查找、统计数字空格的库函数、2+22+222,猴子吃桃,乒乓球比赛,八皇后问题)

1.折半查找

#include<stdio.h>

int BinSearch(int* arr, int len,int key)
{
	int low = 0;
	int mid;
	int high = len - 1;
	while (low <= high)
	{
		mid = (low + high) / 2;
		if (arr[mid] == key)
		{
			return mid;
		}
		else if (arr[mid] < mid)
		{
			low = mid + 1;
		}
		else
		{
			high = mid - 1;
		}
	}
	return -1;
}

int main()
{
	int arr[] = { 1,3,4,6,8,9,12,15 };
	int s=BinSearch(arr, sizeof(arr) / sizeof(arr[0]), 6);
	printf("%d", s);
	return 0;
}

2.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数

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

void Count()
{
	int alpha = 0;
	int digit = 0;
	int blank = 0;
	int other = 0;
	char ch;
	while ((ch = getchar()) != '\n')
	{
		if (isalpha(ch))
		{
			alpha++;
		}
		else if (isdigit(ch))
		{
			digit++;
		}
		else if (ch == ' ')
		{
			blank++;
		}
		else
		{
			other++;
		}
	}
	printf("%d,%d,%d,%d\n", alpha, digit, blank, other);
}

int main()
{
	Count();
	return 0;
}

3.求Sn=a+aa+aaa+…+aa…aa之值,其中a是一个数字,n表示a的位数,例如:2+22+222+2222+22222(此时n=5)n由键盘输入

#include<stdio.h>

//构造数字
int GetNum(int a,int n)
{
	int tmp = 0;
	for (int i = 0; i < n; ++i)
	{
		tmp = tmp * 10 + a;
	}
	return tmp;
}

int Sum(int a, int n)
{
	int sum = 0;
	for (int i = 1; i <= n; ++i)
	{
		sum = sum + GetNum(a, i);
	}
	return sum;
}
int main()
{
	printf("%d\n", Sum(2, 3));//2+22+222=246
	return 0;
}

4.猴子吃桃

猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一般零一个。到了第十天早上再想吃时,就只剩一个桃子了,求第一天共摘了多少桃子?

#include<stdio.h>

int Peach()
{
	int sum = 1;
	for (int i = 9; i >= 1; --i)
	{
		sum = (sum + 1) * 2;
	}
	return sum;
}

int main()
{
	printf("%d\n", Peach());
	return 0;
}

5.乒乓球比赛(穷举法)

两个乒乓球队进行比赛,各出3人,甲队为A,B,C 3人,乙队为X,Y,Z 3人。抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,找出3对赛手的名单。

#include<stdio.h>

void Match()
{
	for (char a = 'X'; a <= 'Z'; a++)
	{
		for (char b = 'X'; b <= 'Z'; b++)
		{
			for (char c = 'X'; c <= 'Z'; c++)
			{
				if (a != 'X' && c != 'X' && c != 'Z' && a != b && b != c && a != c)
				{
					printf("A->%c,B->%c,C->%c\n", a, b, c);

					//printf("A->%c\n", a);
					//printf("B->%c\n", b);
					//printf("C->%c\n", c);

				}
			}
		}
	}
}

int main()
{
	Match();
	return 0;
}

6.换硬币

在一个陌生的国度,有五种不同的硬币单元:15,23,29,41和67(分)。寻找所有组成18元8分(即1808分)的可能组合。假定对于所有面值的硬币你都有足够的硬币。

#include<stdio.h>

void Count()
{
	int count = 0;
	for (int a = 0; a <= 1808/15; ++a)
	{
		for (char b = 0; b <= 1808/23; ++b)
		{
			if (a * 15 + b * 23 > 1808)
			{
				continue;
			}
			for (char c = 0; c <= 1808/29; ++c)
			{
				if (a * 15 + b * 23 + c * 29 > 1808)
				{
					continue;
				}
				for (char d = 0; d <= 1808/41; ++d)
				{
					if (a * 15 + b * 23 + c * 29 + d * 41 > 1808)
					{
						continue;
					}
					for (char e = 0; e <= 1808 / 67; ++e)
					{
						if (a * 15 + b * 23 + c * 29 + d * 41+e*67 > 1808)
						{
							continue;
						}
						if (a * 15 + b * 23 + c * 29 + d * 41 + e * 67 == 1808)
						{
						//	printf("15分:%d, 23分:%d, 29分:%d, 41分:%d \n", a, b, c, d);
							count++;

						}
					}
				}
			}
		}
	}
	printf("%d\n", count);
}

int main()
{
	Count();
	return 0;
}

7.八皇后问题(暴力穷举)

void Queen()
{
	for (int q1 = 0; q1 < 8; ++q1)
	{
		for (int q2 = 0; q2 < 8; ++q2)
		{
			if (q2 == q1 || q1 + 1 == q2 || q1 - 1 == q2)
			{
				continue;
			}
			for (int q3 = 0; q3 < 8; ++q3)
			{
				if (q1 + 2 == q3 || q1 - 2 == q3 || q1 == q3 || q2 == q3 || q2 + 1 == q3 || q2 - 1 == q3)
				{
					continue;
				}
		//		for ............继续往下判断  最后再输出
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值