#define _CRT_SECURE_NO_WARNINGS
#include
using namespace std;
#include
#include
#include
15.一小球从100米高度自由落下,每次落地后反跳回
原高度的一半,再落下,求它在第10次落地时,共经过多少米?
第10次反弹多高?
void test1()
{
float Higth = 100;
float totil = 100;
int count = 10;
while (--count)
{
totil += Higth;
Higth = Higth / 2;
}
printf("%f \n", totil);
printf("%f \n", Higth/2);
}16.猴子吃桃问题:猴子第一天摘下若
干个桃子,当即吃了一半,还不够过瘾,又多吃了一个;第二天早
上又将剩下的桃子吃了一半,又多吃一个。以后每天都吃了前一天剩
下的一半多一个。到第10天想再吃是,见只有一个桃子了。求第一天共
摘了多少个桃子?
1
void test1() houzichitaowenti
{
int count = 10;
int x1 = 0;
int x2 = 1;
while (--count)
{
x1 = (x2 + 1) * 2;
x2 = x1;
count;
}
printf("%d \n", x1);
// printf("%d \n", EachDay);
}
int fun(int day)
{
if (day == 1)
return 1;
else
{
return (fun(day - 1) + 1) * 2;
}
}
求解:1 - 1 / 2 + 1 / 3 - 1 / 4 + 1 / 5…… + 1 / 99 - 1 / 100的值。
void test1()
{
float flag = 1;
int count = 100;
float ret = 0;
int i = 1;
while (count--)
{
if (i % 2 == 0)
flag = -1;
float sum = 1 / (i*flag);
ret += sum;
i++;
}
printf("%f", ret);
}
18.阶乘问题:求1 + 2! + 3! + 4! + …… + 20!的和。
int fun(int x)
{
if (x == 1)
return 1;
else return x*fun(x - 1);
}
19.回文数字:判断一个数字是不是回文数。(回
文数的特点是正反序是同一个数字,如:12321, 3443)。
void test1(int n)
{
int i = n;
int j = 0;
while (n)
{
j = j * 10 + n % 10;
n = n / 10;
}
if (j == i)
printf("是回文");
else
{
printf("不是回文");
}
}
20.回文字符串:判断一个字符串是不是回文字符
串。(回文字符串特点是原字符串与字符串逆序之
后一样,如:"abcba", "cddc")。
int test1(char *str)
{
int n = strlen(str);
char *left = str;
char *right = str + n-1;
while (left
{
if (*left == *right)
{
left++;
right--;
}
else
{
return -1;
}
}
return 1;
}
void BubbleSort(int *p, int n)//冒泡排序的优化
{
int flag = n;
//int k = n;
while (flag>0)
{
int k = flag;
flag = 0;
for (int i = 1; i
if (p[i - 1]>p[i])
{
swap(&p[i - 1],&p[i]);
flag = i;
}
}
}
24.将多个字符串排序输出。
比如:有三个字符串分别是:“Hello”、"bit-tech"、"world"。
void swap(char *p, char *q)
{
char *tmp = p;
p = q;
q = tmp;
// }
void StrSort(char **p)
{
if (strcmp(p[0], p[1]) > 0)
{
swap(p[0], p[1]);
}
if (strcmp(p[1], p[2]) > 0)
{
swap(p[1], p[2]);
}
if (strcmp(p[0], p[1]) > 0)
{
swap(p[0], p[1]);
}
}
25.用递归的方式求斐波那契数列的第n个数。
定义:
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368
特别指出:第0项是0,第1项是第一个1。
这个数列从第2项开始,每一项都等于前两项之和。
int fibonaqi(int n)
{
if (n == 1)
return 0;
if (n == 2)
return 1;
else
{
return fibonaqi(n - 1) + fibonaqi(n - 2);
}
}非递归
int fibonaqi(int n)
{
int a=0, b=1, c;
if (n == 1)
return a;
if (n == 2)
return b;
for (int i = 3; i <= n;i++)
{
c = a + b;
a = b;
b = c;
}
return c;
}28.不允许创建临时变量求一个字符串的长度。 递归!!!
int StrLength(char *p)
{
if (
p == NULL)
return 0;
if (*p == '\0')
return 0;
else
{
return StrLength(p + 1) + 1;
}
}29.对任意一个整型数组排序(使用选择排序)
若每次取一个最大一个最小 则最好构建临时整型数组
void SlectSort(int *p, int n)
{
int right = n-1;
int left = 0;
for (; left
{
int min = left;
int max = right;
for (int i = left; i <= right; i++)
{
if (p[min]>p[i])
min = i;
if (p[max]
max = i;
}
if (min != left)
{
swap(p[min], p[left]);
if (max == left)
max = min;
}
if (max != right)
{
swap(p[max], p[right]);
}
}
}30.求一个数的二进制序列中1的个数。
int NumberOfOne(int n)
{
int count = 32;
int number = 0;
while (count--)
{
if (n & 1 == 1)//此位为1
++number;
n >>= 1;
}
return number;
}
31.编写程序判断你的电脑的存储方式是大端存储还是小端存储? 大小端存储
union var
{
char a;
int b;
};
union var data;
//data.b = 1; 联合不能在函数外定义?
void test()
{
data.b = 1;
32.不允许创建第三方变量交换两个数的值。(注意:数的类型)
void swap(void *x, void *y)
{
(int *)x;
(int *)y;
*(int *)x = *(int *)x ^ (*(int *)y);
*(int *)y = *(int *)x ^ (*(int *)y);
*(int *)x = *(int *)x ^ (*(int *)y);
}
void swap(char *x, char *y,char )
{
*(char *)x = *(char *)x ^ (*(char *)y);
*(char *)y = *(char *)x ^ (*(char *)y);
*(char *)x = *(char *)x ^ (*(char *)y);
}
void test()
{
char a = 0;
char b = 1;
swap(&a, &b,char );
33.求1-100这100个整数中9出现的次数。//如何输出???
int NumberOfNine(int n)
{
int i = 1;
int count = 0;
for (; i <= 1000; i++)
{
int tmp = i;
while (tmp)
{
if (tmp % 10 == 9)
{
//if (tmp==)
cout <
++count;
}
tmp = tmp / 10;
}
}
cout <
return count;
}34.程序接收一个整数输入,输出该整数的每一位。
如:接收数字:1234 输出:1、2、3、4四个数字。///递归!!
/*void test(int n)
{
if (n<0)
{
cout <
n = -n;
}
if (n > 10)
test(n / 10);
cout <
}*/
void test(int n)
{
if (n<0)
{
cout <
n = -n;
}
int a = n;
int num = 1;
while (a>10)
{
num *= 10;
a = a / 10;
}
while (n)
{
cout <
n = n%num;
num /= 10;
}
}
35.在字符串中查找一个指定的字符第一次出现的位置,并返回字符所在的位置,如果不存在则返回NULL。
int FindFirst(const char *str,char q)//"sadqweqsadsadas"//注意空 字符串
{
if (str == NULL)
return NULL;
int Add = 0;
while (*str)
{
++Add;
if (*str == q)
return Add;
str++;
}
if (*str == q)
{
++Add;
return Add;
}
return NULL;
}36.将一个字符串内容逆序。如:一个字符数组内容是:arr[]="bit-tech";经过逆序之后数组的内容变为:"hcet-tib"。
void Reverse(char *str)
{
int Length = strlen(str);
int left = 0;
int right = Length - 1;
for (; left
{
swap(str[left], str[right]);
}
}
37.编写一个函数,它从一个字符串中提取一个子字符串。函数原型如下:
int substr(char dst[], charsrc[], int len){}
目标是:从src数组起始位置向后偏移start个字符的位置开始,最多复制len个非NULL字符到dst数组。
在复制完毕之后,dst数组必须以NULL字节结尾。函数的返回值是存储于dst数组中的字符串的长度。
int substr(char dst[], char src[], int len)
{
assert(dst);
assert(src);
int start = 2;
int count = 0;
//if (len > strlen(src))
// return 0;
while (start--&&src)
{
++src;
}
while (*dst&&*src&&len--)
{
*dst = *src;
dst++;
src++;
++count;
}
*dst = NULL;
return count;
}38.编写程序:从标准输入读取字符,并把它们写到标准输出。。除了大写字母转换成小写字母外,其他的原样输出。
void test()
{
char c;
char p[20];
int i = 0;
while ((c=getchar()) != '\n'&&i<=20)// i为个数
{
p[i] = c;
++i;
}
p[i] = '\n';
for (int j = 0; j
{
printf("%c", p[j]);
}
for (int j = 0; j
{
if (p[j] >= 65 && p[j] <= 91)
{
p[j] += 32;
}
}
for (int j = 0; j
{
printf("%c", p[j]);
}
39.编写程序:当输入小写字母a,输出大写字母Z,当输入小写字母b,输出大写字母Y,以此类推,当输入小写字母z,输出大写字母A。
时间复杂度0(1)
void Exchange()
{
char a = 'z';
char c = getchar();
cout <
printf("%c", 187 - c);
}40.实现字符串的拷贝,功能类似strcpy,不能使用任何库函数(函数原型自己设计)
void Mystrcpy(char *dst, char *src)
{
assert(dst);
assert(src);
/* if (strlen(dst)
{
return;
}*/
while (*src&&*dst)
{
*dst = *src;
src++;
dst++;
}
*dst = '\0';
}实现字符串的链接,功能类似strcat,不能使用任何库函数。
void Mystrcat(char *dst, char *scr)
{
assert(dst);
assert(scr);
while (*dst)
{
dst++;
}
while (*scr)
{
*dst++ = *scr++;
}
*dst = '\0';
实现字符串的比较,功能类似strcmp,不能使用任何库函数。实现字符串的比较,功能类似strcmp,不能使用任何库函数。
int Mystrcmp(char *str1, char* str2)
{
assert(str1);
assert(str1);
while (*str1&&*str2&&(*str1==*str2))//str1='\0'
{
str1++;
str2++;
}
if (*str1 == *str2)
return 0;
else if (*str1>*str2)
{
return 1;
}
else
{
return -1;
}
}
实现内存的拷贝,功能 类似memcpy,可以不实现内存重叠拷贝,不能使用任何库函数。
void MYmemcpy(char *dst,char *src)
{
}//将一个数字字符串转换为对应的数字,不考虑溢出。(比如:"12.34"转换为数字:12.34),功能类似库函数atof,考虑异常输出。
1元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有20元钱,最多可以喝到几瓶汽水?
int NumberOf(int Money)
{
int Empty = Money/1;
int totil = Money;
while (Empty>=2)
{
totil += Empty / 2;
Empty = Empty / 2 + Empty % 2;
}
return totil;
}49.编程求解:有一个字符串是"student a am i", 现变邪恶代码将字符串转换为"i am a student"。 i ma o tneduts要求:空间复杂度O(1).
void swap(char *left, char *right)
{
while (left
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void Reverse(char *str)
{
char*tmp = str;
int Length = strlen(str);
int right = Length - 1;
int left = 0;
swap(str+left, str+right);
while (*str)
{
char *first = str;
char *second = NULL;
while (*first!=' '&&*first!='\0')
{
first++;
}
second = first-1;
swap(str, second);
str = ++first;
}
}
int main()
{
//int ret=test1("4454545");
//int ret = fun(10);
//char p[] = "abcde";
//char q[] = "abc";
//char a[] = "ab";
//char *r[3];
//r[0] = p;
//r[1] = q;
//r[2] = a;
//StrSort(r);
//int ret = fibonaqi(1);
//cout <
//char p[] = "q";
//int ret = StrLength(p);
//cout <
//int arr[] = { 4, 7, 8, 5, 6, 9, 3, 21, 12, 45, 68, 411, 256 };
//SlectSort(arr, 13);
//int ret = NumberOfOne(7);
// NumberOfNine(9);
//char *p = "qwerty";
//
//int ret=FindFirst(p, '\0');
//test(-1234);
//test(-1234);
//char p[] = "hello world";
//Reverse(p);
//cout <
//char p[] = "helloworld";
//char q[] = "wel";
//substr(q, p, 20);
//cout <
//Exchange();
//char p[] = "Hello World";
//char q[] = "welcome";
//Mystrcpy(q, p);
//char p[6] = "hello";
//char q[] = " world";
//strcat(p, q);
//printf("%s\n", p);
//char p[] = "aaa";
//char q[] = "aaa";
//int ret=Mystrcmp(p, q);
//int t = NumberOf(20);
//cout <
char p[] = "student a am i";
Reverse(p);
system("pause");
//getchar();
return 0;
}