//题目28:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第 //3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后 //问第一个人,他说是10岁。请问第五个人多大? #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<math.h> //分析:经过阅读,发现f(5)=f(4)+2;f(4)=f(3)+2;f(3)=f(2)+2;f(2)=f(1)+2;所以可以使用递归,也可以直接求出 //f(5)=f(4)+2=f(3)+2+2=f(3)+2*2=f(2)+2+2+2=f(2)+2*3=f(2)+2*(5-2)=f(1)+2*(5-1)=18; //由于太过简单,此处不使用递归 void main(){ printf("第五个人%d岁", 10 + 2 * (5 - 1)); system("pause"); }
//题目29:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<math.h> //分析:求它是几位数,先除以10得到一个数,num-这个数,逆序将数字存到数组里递归就OK了 char str3[8] = { 0 }; void run3(int n){ if (n==0) { printf("%c", str3[n]); } else{ printf("%c", str3[n]); run3(n-1); } } void main(){ scanf("%s", str3); int index = 0; while (str3[index] != '\0'){ index++; } printf("这个数字是%d位数\n",index); printf("逆序排列\n"); run3(index); system("pause"); }
//题目30:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<math.h> //分析:很简单,分离出个十百千万位就OK了 //设计出万能获取数字各个位的方法 //获取正整数各个位的值 int * Numcount(int num){ //定义静态数组,以便调用 static int arr[12] = { 0 }; if (num >= (int)pow(10.0, 9.0)) { arr[9] = num / (int)pow(10.0, 9.0); num = num - arr[9] * (int)pow(10.0, 9.0); arr[8] = num / (int)pow(10.0, 8.0); num = num - arr[8] * (int)pow(10.0, 8.0); arr[7] = num / (int)pow(10.0, 7.0); num = num - arr[7] * (int)pow(10.0, 7.0); arr[6] = num / (int)pow(10.0, 6.0); num = num - arr[6] * (int)pow(10.0, 6.0); arr[5] = num / (int)pow(10.0, 5.0); num = num - arr[5] * (int)pow(10.0, 5.0); arr[4] = num / (int)pow(10.0, 4.0); num = num - arr[4] * (int)pow(10.0, 4.0); arr[3] = num / (int)pow(10.0, 3.0); num = num - arr[3] * (int)pow(10.0, 3.0); arr[2] = num / (int)pow(10.0, 2.0); num = num - arr[2] * (int)pow(10.0, 2.0); arr[1] = num / (int)pow(10.0, 1.0); num = num - arr[1] * (int)pow(10.0, 1.0); arr[0] = num; } else if (num >= (int)pow(10.0, 8.0)){ arr[8] = num / (int)pow(10.0, 8.0); num = num - arr[8] * (int)pow(10.0, 8.0); arr[7] = num / (int)pow(10.0, 7.0); num = num - arr[7] * (int)pow(10.0, 7.0); arr[6] = num / (int)pow(10.0, 6.0); num = num - arr[6] * (int)pow(10.0, 6.0); arr[5] = num / (int)pow(10.0, 5.0); num = num - arr[5] * (int)pow(10.0, 5.0); arr[4] = num / (int)pow(10.0, 4.0); num = num - arr[4] * (int)pow(10.0, 4.0); arr[3] = num / (int)pow(10.0, 3.0); num = num - arr[3] * (int)pow(10.0, 3.0); arr[2] = num / (int)pow(10.0, 2.0); num = num - arr[2] * (int)pow(10.0, 2.0); arr[1] = num / (int)pow(10.0, 1.0); num = num - arr[1] * (int)pow(10.0, 1.0); arr[0] = num; } else if (num >= (int)pow(10.0, 7.0)) { arr[7] = num / (int)pow(10.0, 7.0); num = num - arr[7] * (int)pow(10.0, 7.0); arr[6] = num / (int)pow(10.0, 6.0); num = num - arr[6] * (int)pow(10.0, 6.0); arr[5] = num / (int)pow(10.0, 5.0); num = num - arr[5] * (int)pow(10.0, 5.0); arr[4] = num / (int)pow(10.0, 4.0); num = num - arr[4] * (int)pow(10.0, 4.0); arr[3] = num / (int)pow(10.0, 3.0); num = num - arr[3] * (int)pow(10.0, 3.0); arr[2] = num / (int)pow(10.0, 2.0); num = num - arr[2] * (int)pow(10.0, 2.0); arr[1] = num / (int)pow(10.0, 1.0); num = num - arr[1] * (int)pow(10.0, 1.0); arr[0] = num; } else if (num >= (int)pow(10.0, 6.0)) { arr[6] = num / (int)pow(10.0, 6.0); num = num - arr[6] * (int)pow(10.0, 6.0); arr[5] = num / (int)pow(10.0, 5.0); num = num - arr[5] * (int)pow(10.0, 5.0); arr[4] = num / (int)pow(10.0, 4.0); num = num - arr[4] * (int)pow(10.0, 4.0); arr[3] = num / (int)pow(10.0, 3.0); num = num - arr[3] * (int)pow(10.0, 3.0); arr[2] = num / (int)pow(10.0, 2.0); num = num - arr[2] * (int)pow(10.0, 2.0); arr[1] = num / (int)pow(10.0, 1.0); num = num - arr[1] * (int)pow(10.0, 1.0); arr[0] = num; } else if (num >= (int)pow(10.0, 5.0)) { arr[5] = num / (int)pow(10.0, 5.0); num = num - arr[5] * (int)pow(10.0, 5.0); arr[4] = num / (int)pow(10.0, 4.0); num = num - arr[4] * (int)pow(10.0, 4.0); arr[3] = num / (int)pow(10.0, 3.0); num = num - arr[3] * (int)pow(10.0, 3.0); arr[2] = num / (int)pow(10.0, 2.0); num = num - arr[2] * (int)pow(10.0, 2.0); arr[1] = num / (int)pow(10.0, 1.0); num = num - arr[1] * (int)pow(10.0, 1.0); arr[0] = num; } else if (num >= (int)pow(10.0, 4.0)) { arr[4] = num / (int)pow(10.0, 4.0); num = num - arr[4] * (int)pow(10.0, 4.0); arr[3] = num / (int)pow(10.0, 3.0); num = num - arr[3] * (int)pow(10.0, 3.0); arr[2] = num / (int)pow(10.0, 2.0); num = num - arr[2] * (int)pow(10.0, 2.0); arr[1] = num / (int)pow(10.0, 1.0); num = num - arr[1] * (int)pow(10.0, 1.0); arr[0] = num; } else if (num >= (int)pow(10.0, 3.0)) { arr[3] = num / (int)pow(10.0, 3.0); num = num - arr[3] * (int)pow(10.0, 3.0); arr[2] = num / (int)pow(10.0, 2.0); num = num - arr[2] * (int)pow(10.0, 2.0); arr[1] = num / (int)pow(10.0, 1.0); num = num - arr[1] * (int)pow(10.0, 1.0); arr[0] = num; } else if (num >= (int)pow(10.0, 2.0)) { arr[2] = num / (int)pow(10.0, 2.0); num = num - arr[2] * (int)pow(10.0, 2.0); arr[1] = num / (int)pow(10.0, 1.0); num = num - arr[1] * (int)pow(10.0, 1.0); arr[0] = num; } else if (num >= (int)pow(10.0, 1.0)) { arr[1] = num / (int)pow(10.0, 1.0); num = num - arr[1] * (int)pow(10.0, 1.0); arr[0] = num; } else{ arr[0] = num; } return arr; } void main(){ int num = 12321; int *p = Numcount(num); if ((*(p) == *(p + 4)) && (*(p+1) == *(p + 3))) { printf("%d是回文数\n",num); } else{ printf("%d不是回文数\n", num); } system("pause"); }