PAT
上上谦i
这个作者很懒,什么都没留下…
展开
-
习题10-4 递归求简单交错幂级数的部分和
递归求简单交错幂级数的部分和递归思路:x - x 乘以 函数的上一次次幂。double fn( double x, int n ){ if(n == 1) return x; else return x - x * fn(x, n - 1);}原创 2021-02-02 15:12:06 · 94 阅读 · 0 评论 -
习题10-6 递归求Fabonacci数列
递归求Fabonacci数列本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。函数接口定义:int f(int n);函数f应返回第n个Fabonacci数。题目保证输入输出在长整型范围内。建议用递归实现。递归思路:先确定为0时返回0,为1时返回1。int f(int n){ int sum; if(n == 0) return 0; else if(n == 1)原创 2021-02-02 14:52:32 · 285 阅读 · 0 评论 -
习题10-8 递归实现顺序输出整数
递归实现顺序输出整数本题要求实现一个函数,对一个整数进行按位顺序输出。函数接口定义:void printdigits( int n );函数printdigits应将n的每一位数字从高位到低位顺序打印出来,每位数字占一行。思路:递归,每次传入的数除以10。退出条件,当传入的数小于10void printdigits( int n ){ if(n < 10) printf("%d\n",n); else{ printdigits(n / 10); printf("%d原创 2021-02-02 14:41:28 · 410 阅读 · 0 评论 -
习题10-2 递归求阶乘和
递归求阶乘和本题要求实现一个计算非负整数阶乘的简单函数,并利用该函数求 1!+2!+3!+…+n! 的值。函数接口定义:double fact( int n );double factsum( int n );函数fact应返回n的阶乘,建议用递归实现。函数factsum应返回 1!+2!+…+n! 的值。题目保证输入输出在双精度范围内。fact函数递归思路:在数的阶乘中,0是特殊存在而外返回。构造:n - 1的阶乘 * n。退出条件:当n为1的时候返回n的阶乘也就是1double f原创 2021-01-21 17:13:52 · 2763 阅读 · 0 评论 -
习题10-1 判断满足条件的三位数
判断满足条件的三位数本题要求实现一个函数,统计给定区间内的三位数中有两位数字相同的完全平方数(如144、676)的个数。函数接口定义:int search( int n );其中传入的参数int n是一个三位数的正整数(最高位数字非0)。函数search返回[101, n]区间内所有满足条件的数的个数。思路1:从101逐个增加判断是否为完全平方数,在取出个位十位百位比较,是否有相同的两个数字,计数器加1。int search( int n ){ int num = 0; //计数原创 2021-01-21 16:53:05 · 2583 阅读 · 1 评论 -
练习10-1 使用递归函数计算1到n之和
使用递归函数计算1到n之和本题要求实现一个用递归计算1+2+3+…+n的和的简单函数。函数接口定义:int sum( int n );该函数对于传入的正整数n返回1+2+3+…+n的和;若n不是正整数则返回0。题目保证输入输出在长整型范围内。建议尝试写成递归函数。int sum(int n){ int sum; if(n <= 0) return 0; else sum = sum(n - 1) + n; return sum;}...原创 2021-01-15 15:30:37 · 398 阅读 · 0 评论 -
习题8-8 判断回文字符串
判断回文字符串本题要求编写函数,判断给定的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。函数接口定义:bool palindrome( char *s );函数palindrome判断输入字符串char *s是否为回文。若是则返回true,否则返回false。思路:声明一个末尾指针,与传入指针逐一比较,循环次数取长度/2次,不相等时返回false。未返回false则返回true。bool palindrome( char *s原创 2021-01-15 14:24:31 · 548 阅读 · 0 评论 -
习题8-6 删除字符
删除字符本题要求实现一个删除字符串中的指定字符的简单函数。函数接口定义:void delchar( char *str, char c );其中char *str是传入的字符串,c是待删除的字符。函数delchar的功能是将字符串str中出现的所有c字符删除。思路1:数组方法,当找到要删除的字符时,将该字符后面的所有字符往前移动,注意需要判断是否两个连续要删除的字符。void delchar( char *str, char c ){ int i = 0; //用于遍历原创 2021-01-13 14:29:58 · 2309 阅读 · 0 评论 -
习题8-5 使用函数实现字符串部分复制
使用函数实现字符串部分复制本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。函数接口定义void strmcpy( char *t, int m, char *s );思路1:使用数组的方法部分复制void strmcpy( char *t, int m, char *s ){ int j = 0; for(int i = m - 1; t[i] != '\0'; i++){ //当t[i]没有遍历最后一位时,一直复制 s[j] = t[i]; j+原创 2021-01-13 11:36:58 · 793 阅读 · 0 评论 -
习题8-4 报数
报数报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。本题要求编写函数,给出每个人的退出顺序编号。函数接口定义:void CountOff( int n, int m, int out[] );其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)。函数CountOff将每个人的退出顺序编号存在数组out[]中。因为C语言数组下标是从0开始的,所以第i个原创 2021-01-13 11:24:57 · 92 阅读 · 0 评论 -
习题8-3 数组循环右移
数组循环右移思路:移动m位,可通过循环进行控制,在内存循环完成交换。int ArrayShift( int a[], int n, int m ){ int temp; //临时交换 int count = 1; //每次移动1位 while(m){ //循环m次 for(int i = n - 1; i > 0; i--){ temp = a[i]; a[i] = a[i - count]; a[i - count] = temp; } m--;原创 2021-01-11 17:07:35 · 87 阅读 · 0 评论 -
习题6-5 使用函数验证哥德巴赫猜想
使用函数验证哥德巴赫猜想本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。函数接口定义:int prime( int p );void Goldbach( int n );其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数Goldbach按照格式“n=p+q”输出n的素数分解,其中p≤q均为素数。又因为这样的分解不唯一(例如24可以分解为5+19,还可以原创 2021-01-10 13:42:38 · 1002 阅读 · 0 评论 -
习题6-4 使用函数输出指定范围内的Fibonacci数
使用函数输出指定范围内的Fibonacci数本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有Fibonacci数。所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。...原创 2021-01-10 12:13:07 · 3034 阅读 · 0 评论 -
习题6-3 使用函数输出指定范围内的完数
使用函数输出指定范围内的完数本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有完数。所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。函数接口定义int factorsum( int number );void PrintPN( int m, int n );其中函数factorsum须返回int number的因子和;函数PrintPN要逐行输出给定范围[m, n]内每个完数的原创 2021-01-09 15:13:50 · 642 阅读 · 0 评论 -
习题5-6 水仙花数
水仙花数水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。思路:题目的关键在于输入的数为100~10000,意味着首先需要考虑到输入的是三位数还是四位数。其次并没有引入math.h因此不能使用pow函数。int narcissisct(int number){ int sum; //用于最后累加求和判断原创 2021-01-08 16:25:36 · 435 阅读 · 0 评论 -
1002 - 写出这个数
1002 - 写出这个数思路:由于n的大小必不可能使用int或long int来保存,所以需要用到字符串,以及需要中文输出就需要用到switch和case第一步——求和int n,num; //n用于输入,num用于累加while((n = getchar()) != '\n'){ num += n - '0'; //获取字符后,实际为ascll码需要减去0的ascll码}第二步——保存到字符串中int count = 0; //字符串下标char *str[100]; w原创 2021-01-07 17:15:53 · 105 阅读 · 0 评论