#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; #include<assert.h> #include<stdio.h> #include<string.h> 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<right) { 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 < k;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 < right; left++, right--) { int min = left; int max = right; for (int i = left; i <= right; i++) { if (p[min]>p[i]) min = i; if (p[max] < p[i]) 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 << i << endl; ++count; } tmp = tmp / 10; } } cout << count << endl; return count; }34.程序接收一个整数输入,输出该整数的每一位。 如:接收数字:1234 输出:1、2、3、4四个数字。///递归!! /*void test(int n) { if (n<0) { cout << "-" << endl; n = -n; } if (n > 10) test(n / 10); cout << n % 10 <<endl; }*/ void test(int n) { if (n<0) { cout << "-" << endl; n = -n; } int a = n; int num = 1; while (a>10) { num *= 10; a = a / 10; } while (n) { cout << n / num << endl; 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 < right; left++, right--) { 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 < i; j++) { printf("%c", p[j]); } for (int j = 0; j < i; j++) { if (p[j] >= 65 && p[j] <= 91) { p[j] += 32; } } for (int j = 0; j < i; j++) { printf("%c", p[j]); } 39.编写程序:当输入小写字母a,输出大写字母Z,当输入小写字母b,输出大写字母Y,以此类推,当输入小写字母z,输出大写字母A。 时间复杂度0(1) void Exchange() { char a = ‘z‘; char c = getchar(); cout << endl; printf("%c", 187 - c); }40.实现字符串的拷贝,功能类似strcpy,不能使用任何库函数(函数原型自己设计) void Mystrcpy(char *dst, char *src) { assert(dst); assert(src); /* if (strlen(dst) < strlen(src)) { 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 < right) { 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 << ret << endl; //char p[] = "q"; //int ret = StrLength(p); //cout << ret << endl; //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 << p << endl; //char p[] = "helloworld"; //char q[] = "wel"; //substr(q, p, 20); //cout << q << endl; //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 << t << endl; char p[] = "student a am i"; Reverse(p); system("pause"); //getchar(); return 0; }
时间: 2024-09-30 05:47:41