C语言习题01
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 ............继续往下判断 最后再输出
}
}
}
}