目录
R6-1 最大公约数-递归
函数接口定义:
裁判测试程序样例:
输入样例:
输出样例:
R6-2 猴子吃桃-递归
函数接口定义:
裁判测试程序样例:
输入样例:
输出样例:
R6-3 奇妙的定律-递归
函数接口定义:
裁判测试程序样例:
输入样例:
输出样例:
R6-4 删除单链表的第i个结点。
函数接口定义:
裁判测试程序样例:
输入样例1:
输出样例1:
输入样例2:
输出样例2:
R6-5 链表-查找链表最后节点
函数接口定义:
裁判测试程序样例:
输入样例:
输出样例:
R6-6 链表逆序
函数接口定义:
裁判测试程序样例:
输入样例:
输出样例:
R6-7 结构体-查找最低分学生记录
函数接口定义:
裁判测试程序样例:
输入样例:
输出样例:
R6-8 结构体-查找同学信息
函数接口定义:
裁判测试程序样例:
输入样例:
输出样例:
R6-9 逆序输出字符串
函数接口定义:
裁判测试程序样例:
输入样例:
输出样例:
R6-10 求整数区间[a,b]中偶数之和
函数接口定义:
裁判测试程序样例:
输入样例:
输出样例:
R6-11 阶乘计算
函数接口定义:
裁判测试程序样例:
输入样例:
输出样例:
R6-12 求10×10方阵主副对角线元素之和
要求:
函数接口定义:
裁判测试程序样例:
输入样例:
输出样例:
R6-13 输入多个单词,统计以指定字母开头的单词个数
函数接口定义:
裁判测试程序样例:
输入样例:
输出样例:
R6-14 求等差数列前n项和
函数接口定义:
裁判测试程序样例:
输入说明:
输入样例:
输出样例:
R6-15 找一维数组中大于某个数的最小值
函数接口定义:
裁判测试程序样例:
输入样例:
输出样例:
R6-1 最大公约数-递归
输入两个正整数输出两个数的最大公约数,用递归函数实现。
函数接口定义:
int gcd (int a, int b);
请用递归形式完成上面函数,该函数返回a和b的最大公约数。
裁判测试程序样例:
int gcd (int a, int b);
int main()
{
int m, n;
scanf("%d%d",&m,&n);
printf("%dn",gcd(m,n));
return 0;
}
输入样例:
4 6
输出样例:
2
4 6
输出样例:
2
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
代码如下:
int gcd (int a, int b)
{
int t = b;
if (b == 0)
return a;
b = a % b;
a = t;
return gcd(a, b);
}
R6-2 猴子吃桃-递归
小猴子第一天摘下桃子若干,当即吃掉一半,还不过瘾,又多吃一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪明的你,请帮悟空算一下,他第一天开始吃的时候桃子一共有多少个呢?。
请通过递归形式实现。
函数接口定义:
int Peach(int day);
该函数返回第day天所剩的桃子。用递归实现。
裁判测试程序样例:
#include
int n;
int Peach(int day);
int main ()
{
scanf("%d", &n);
printf("%dn", Peach(1));
return 0;
}
输入样例:
3
输出样例:
10
3
输出样例:
10
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
代码如下:
int Peach(int day)
{
int sum = 0;
if(day == n)
sum += 1;
else if(day < n)
sum += 2*(Peach(day+1)+1);
return sum;
}
R6-3 奇妙的定律-递归
小明偶然间发现一个奇妙的定律,任何一个自然数,如果是偶数,就除以2,如果是奇数,就乘以3再加1。最后,经过若干次迭代得到1。也就是说,不管怎样迭代,不断除以2以后,最后是1。现在给你一个自然数n,求出它转变为1所经过的所有过程。
用递归函数实现。
void F(int n);
该函数输出由n变为1所经过的所有过程。用递归实现。
裁判测试程序样例:#includevoid F(int n); int main() { int n; scanf("%d", &n); F(n); return 0; }
代码如下:
#include输入样例:void F(int n); int main() { int n; scanf("%d", &n); F(n); return 0; }
22输出样例:
两个数之间空格隔开,最后一个数后面没有空格:
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
代码如下:
void F(int n)
{
printf("%d", n);
if (n != 1)
printf(" ");
int i = n;
while(i != 1)
{
if(i % 2 == 0 && i >= 0)
{
i = i / 2;
printf("%d", i);
}
else if(i % 2 != 0 && i >= 0)
{
i = i * 3 + 1;
printf("%d", i);
}
if (i != 1)
printf(" ");
}
}
R6-4 删除单链表的第i个结点。
本题要求实现一个函数,删除单链表的第i个结点。
函数接口定义:Node *deletelink(Node *head, int i)
在这里,head是单链表的头指针,i是待删除的结点编号。函数不需要处理单链表为空的情况。如果删除位置错误,输出"error"。
裁判测试程序样例:#include#include #include typedef struct ListNode { int num; struct ListNode *next; }Node; Node *createlist(); Node *deletelink(Node *head, int i); void display(Node *head); int main(void) { Node *head; int i; head = createlist(); scanf("%d",&i); head = deletelink(head, i); display(head); return 0; }
输入样例1:
5
10 5 4 8 7
2
输出样例1:
10 4 8 7
输入样例2:
5
10 5 4 8 7
6
输出样例2:
error
10 5 4 8 7
10 4 8 7
输入样例2:
5
10 5 4 8 7
6
输出样例2:
error
10 5 4 8 7
error 10 5 4 8 7
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
代码如下:
Node *deletelink(Node *head, int i)
{
Node *p, *s;
int count = 1;
p = head;
if (i == 1)
{
head = p -> next;
return head;
}
while (p -> next != NULL && count < i)
{
s = p;
p = p -> next;
count++;
}
if (count < i)
{
printf("errorn");
return head;
}
else
{
s -> next = p -> next;
free(p);
}
return head;
}
R6-5 链表-查找链表最后节点
题目:查找链表最后节点
struct node
{int ch;
struct node * next;};
由上面类型节点组成的有头节点的单链表,
定义函数遍历链表,返回链表上最后一个节点的数据成员ch的值。
函数接口定义:在这里描述函数接口。例如: int findnode(struct node *head);
head是链表的头指针,返回值是最后节点数据成员ch的值。
裁判测试程序样例:在这里给出函数被调用进行测试的例子。例如: #include输入样例:#include struct node {int ch; struct node * next;}; struct node *setlink(int N); //建链表函数,已经定义 int findnode(struct node * head);//在下边代码区定义此函数 int main() { int N; struct node *head; scanf("%d",&N); head=setlink(N); printf("%d", findnode(head)); return 0; }
在这里给出一组输入。例如:
6 3 1 2 7 4 5输出样例:
在这里给出相应的输出。例如:
5
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
代码如下:
int findnode(struct node *head)
{
struct node *p, *s;
p = head;
while (p != NULL)
{
s = p;
p = p -> next;
}
return s -> ch;
}
R6-6 链表逆序
程序实现了一个单链表的逆序。请完成函数list_reverse()。
函数接口定义:Node* list_reverse(Node* head)
head是单链表的头指针,函数返回逆序后的头指针。
裁判测试程序样例:#include输入样例:#include #include typedef struct ListNode { int num; struct ListNode *next; }Node; Node *createlist(); Node* list_reverse(Node* head); void display(Node *head); int main(void) { Node *head,*p; head = createlist(); head = list_reverse(head); display(head); return 0; }
5 1 2 3 4 5输出样例:
在这里给出相应的输出。例如:
5 4 3 2 1
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
代码如下 :
Node* list_reverse(Node* head)
{
if(head == NULL || head->next == NULL)
return head;
Node *p = list_reverse(head->next); //进入递归
head->next->next = head;
head->next = NULL; //封口,避免了链表存在环
return p;
}
R6-7 结构体-查找最低分学生记录
struct student
{
int num ;
char name[20];
int score;};
typedef struct student stu;
有上面面学生记录类型定义,
定义函数在一组学生记录中找成绩最低的学生信息,
最低分唯一
stu fun( stu a[] )
数组a里存储N个学生记录,返回值是最低分记录
裁判测试程序样例:在这里给出函数被调用进行测试的例子。例如: #include#define N 10 stu fun( stu a[] ); int main() { stu a[N], min; int i; for (i=0;i 输入样例: 在这里给出一组输入。例如:
1 a01 62 2 a02 56 3 a03 77 4 aaa 66 5 bbb 78 11 a01 62 12 a02 57 13 a03 77 14 aaa 96 15 bbb 78输出样例:在这里给出相应的输出。例如:
2 a02 56代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
代码如下:
stu fun( stu a[] ) { stu b; int i, min = 999; //min = a[0].score; for(i = 0; i < N; i++) { if(min > a[i].score) { min = a[i].score; b = a[i]; } } return b; }R6-8 结构体-查找同学信息
定义函数处理存储学生成绩信息的结构体数组,按姓名查找,找到返回成绩,没找到返回-1.
函数接口定义:int fun(struct stu *p, int n,char *sname); 结构体定义如下: struct stu { int num; char name[20]; int score; };p是结构体数组起始地址,n是结构体单元个数,
裁判测试程序样例:
sname是查找的姓名。
结构体三个成员分别是:学号,姓名,成绩。#include输入样例:#include struct stu{ int num; char name[20]; int score; }; int fun( struct stu *p, int n,char *sname ); int main() { struct stu a[20]; int n, i; char str[20]; scanf("%d", &n); for(i = 0; i < n; i++){ scanf("%d%s%d", &a[i].num, a[i].name, &a[i].score); } scanf("%s",str); printf("%d",fun(a,n,str)); return 0; } 在这里给出一组输入。例如:
6 1001 anny 85 1002 boy 75 1003 car 65 1004 dan 55 1005 emm 95 1006 pa 35 boy输出样例:在这里给出相应的输出。例如:
75代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
代码如下:
int fun(struct stu *p, int n,char *sname) { int i; for (i - 0; i < n; i++) { if (strcmp(p[i].name, sname) == 0) return p[i].score; } return -1; }R6-9 逆序输出字符串
编写一个递归函数 displayStringReverse,逆序输出一个字符串的所有元素。
函数接口定义:void displayStringReverse(char *s);其中 s 是用户传入的参数。 s 指向一个以‘ '结束的字符串第一个字符。
裁判测试程序样例:#include输入样例:void displayStringReverse(char *s); int main(void) { char s[30]; gets(s); displayStringReverse(s); return 0; } Hello world!输出样例:!dlrow olleH代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
代码如下:
void displayStringReverse(char *s) { if(*s!=' ') { displayStringReverse(s+1); printf("%c",*s); } }R6-10 求整数区间[a,b]中偶数之和
编写函数,求给定整数区间[a,b]中偶数之和。
函数接口定义:在这里描述函数接口。例如: int sumEven(int begin, int end);参数begin是整数区间的左边界, end是整数区间的右边界,函数的值是该区间所有偶数之和。
裁判测试程序样例:在这里给出函数被调用进行测试的例子。例如: #include输入样例:int main() { int a,b; scanf("%d%d",&a,&b); printf("SumEven = %dn",sumEven(a,b)); return 0; } 在这里给出一组输入。例如:
1 10输出样例:在这里给出相应的输出。例如:
SumEven = 30代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
代码如下:
int sumEven(int begin, int end) { int sum = 0; for (int i = begin; i <= end; i++) { if (i % 2 == 0) sum += i; } return sum; }R6-11 阶乘计算
程序的功能是:求S=1/1!+1/2!+1/3!+…+1/N!并输出结果。N为任意自然数(只考虑int型),从键盘读入
函数接口定义:double fac();double fac();计算阶乘,函数需要使用static 局部变量
裁判测试程序样例:#include输入样例:double fac(); int main(void) { int i, n; double Sum = 0; scanf("%d", &n); for (i=1; i<=n; i++) { Sum += 1 / fac(); } printf("S=1/1!+1/2!+...+1/%d!=%.15f", n, Sum); return 0; } 在这里给出一组输入。例如:
16输出样例:在这里给出相应的输出。例如:
S=1/1!+1/2!+...+1/16!=1.718281828459042代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
代码如下:
double fac() { static n = 1; double sum = 1, i; for (i = 1; i <= n; i ++) { sum *= i; } n++; return sum; }R6-12 求10×10方阵主副对角线元素之和
给定一个10×10的方阵,本题要求计算该方阵主对角线和副对角线所有元素之和。主对角线为从方阵的左上角至右下角的连线,副对角线为从方阵的右上到左下角的连线。
要求:
编写函数按照题意计算元素之和。
函数接口定义:int sumMatrix(int (*a)[10]);指针a指向了一个10×10的方阵
裁判测试程序样例:#include#define N 10 void createMatrix(int (*a)[N])//从键盘读入方阵中的数据 { for(int i=0; i 输入样例: 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10输出样例:110代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
代码如下:
int sumMatrix(int (*a)[10]) { int sum = 0, i, j, x1 = 0, y1 = 0, x2 = 9, y2 = 9; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { if (i == j || j == 9 - i) sum += a[i][j]; } } return sum; }R6-13 输入多个单词,统计以指定字母开头的单词个数
本题目:先输入一个含有多个单词的字符串,然后再输入一个字母,然后调用函数getWordNum统计该行字符中以指定字母开始的单词的个数(不区分大小写)。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
函数接口定义:int getWordNum(char ar1[], char ch) ;函数返回以形参变量ch中的字符开头的字符数组ar1中的单词数
裁判测试程序样例:#include输入样例:int getWordNum(char ar1[],char ch) ; int main() { char string[81],c,n; gets(string); c=getchar(); n=getWordNum(string,c); printf("%d",n); return 0; } 在这里给出一组输入。例如:
af Adf Dad abdde a输出样例:在这里给出相应的输出。例如:
3代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
代码如下:
int getWordNum(char ar1[], char ch) { char *p; int flag = 0, count = 0; p = ar1; while(*p != ' ') { if (*p != ' ' && flag == 0) { flag = 1; if (*p >= 'a' && *p <= 'z' || *p >= 'A' && *p <= 'Z') { if (*p == ch || *p == ch - 32 || *p == ch + 32) count++; } } if(*p == ' ' && flag == 1) flag=0; p++; } return count; }R6-14 求等差数列前n项和
设 a0,a1,⋯an为一个等差数列的前n项,请编写函数求其前n项和sum=a0+a1+⋯+an。
函数接口定义:
说明:数列下标从0开始计数。double SumArithmetic(double start, double diff ,int index);参数start为首项的值,diff为公差,index为通项索引号(从0开始计数)。函数值为第 index 项的值。
裁判测试程序样例:#includeint main() { double h,r; //h首项,r公差 int n; //n通项索引 scanf("%lf%lf%d",&h,&r,&n); printf("%Gn",SumArithmetic(h,r,n)); return 0; } 输入说明:
在一行输入3个实数,分别是首项、公差和数列的项数,数与数之间用1个空格隔开。
输入样例:3.2 1.2 7输出样例:59.2代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
代码如下:
double SumArithmetic(double start, double diff ,int index) { double sum = 0, end = start + diff * index; sum = (start + end) * (index + 1) / 2; return sum; }R6-15 找一维数组中大于某个数的最小值
程序的功能是:从键盘读入N个数到arrA中,再读入一个数num(这些数均≥0),然后调用自定义函数在数组arrA中查找大于num的最小数、输出查找结果,如果未找到,提示“not found”。本题要求实现自定义函数。
函数接口定义:int findOverNum(int *p,int count,int num);其中 p 、 count 、num分别用来存放数组的起始地址、待处理的数组元素个数、要查找的基准数据。 函数须返回数组中大与num的最小数。
裁判测试程序样例:#include#define N 8 int findOverNum(int *p,int count,int num); int main(void) { int arrA[N], num, minA ; int i,t; for(i=0;i 输入样例: 88 11 33 77 22 55 95 66 51输出样例:55代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
代码如下:
int findOverNum(int *p,int count,int num) { int a = 999, i, flag = 0; for (i = 0; i < count; i++) { if (p[i] > num && p[i] < a) { a = p[i]; flag = 1; } } if (flag == 1) return a; return -1; }



