1-1 sdut-C语言实验 – 杨辉三角
任务描述:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
上面的图形熟悉吗?它就是我们中学时候学过的杨辉三角。输入数据包含多组测试数据。每组测试数据的输入只有一个正整数n(1≤n≤30),表示将要输出的杨辉三角的层数。输入以0结束。对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。
函数接口定义:
void yh_tri(int (*a)[30],int n); void yh_output(int (*a)[30],int n);
例如:其中 a
和 n
都是用户传入的参数。 a
的值为二维数组的首地址; n
是[1, 30]区间内的个位数。函数无返回。
裁判测试程序样例:
#include <stdio.h> #define MAXN 10 int search( int list[], int n, int x ); int main() { int i, index, n, x; int a[MAXN]; scanf("%d", &n); for( i = 0; i < n; i++ ) scanf("%d", &a[i]); scanf("%d", &x); index = search( a, n, x ); if( index != -1 ) printf("index = %d\n", index); else printf("Not found\n"); return 0; } /* 你的代码将被嵌在这里 */
输入样例:
2 3 0
输出样例:
1 1 1 1 1 1 1 2 1
相关限制:
代码长度限制16KB 时间限制400ms 内存限制64MB 栈限制8192KB
答案:
void yh_tri(int (*a)[30],int n) { int i,j; for(i=1; i<=n; i++) { for(j=1; j<=i; j++) { if( i==j||j==1) a[i][j]=1; else a[i][j]=a[i-1][j-1]+a[i-1][j]; } } } void yh_output(int (*a)[30],int n) { int i,j; for(i=1; i<=n; i++) { for(j=1; j<=i; j++) { if(j==i) { printf("%d\n",a[i][j]); } else printf("%d ",a[i][j]); } } }
1-2 sdut-C语言实验- 在数组中查找指定元素
任务描述:
本题要求实现一个在数组中查找指定元素的简单函数。
函数接口定义:
int search( int list[], int n, int x );
其中list[]
是用户传入的数组;n
()是list[]
中元素的个数;x
是待查找的元素。如果找到
则函数search
返回相应元素的最小下标(下标从0开始),否则返回。
裁判测试程序样例:
#include <stdio.h> #define MAXN 10 int search( int list[], int n, int x ); int main() { int i, index, n, x; int a[MAXN]; scanf("%d", &n); for( i = 0; i < n; i++ ) scanf("%d", &a[i]); scanf("%d", &x); index = search( a, n, x ); if( index != -1 ) printf("index = %d\n", index); else printf("Not found\n"); return 0; } /* 你的代码将被嵌在这里 */
输入样例:
5 1 2 2 5 4 2
输出样例:
index = 1
相关限制:
代码长度限制16KB 时间限制400ms 内存限制64MB 栈限制8192KB
答案:
int search( int list[], int n, int x ) { int i; for(i=0;i<n;i++) { if(list[i]==x) { return i; } } return -1; }
1-3 sdut-C语言实验-使用函数验证哥德巴赫猜想
任务描述:
本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。输入一个不小于6的偶数n,找出两个素数,使它们的和为n。注意:1不是素数,2是素数。
函数接口定义:
int isPrime( int x ); void Goldbach( int n );
其中函数isPrime当用户传入参数x为素数时返回1,否则返回0;函数Goldbach按照格式“n=p+q”输出n的素数分解,其中p≤q均为素数。又因为这样的分解不唯一(例如24可以分解为5+19,还可以分解为7+17),要求必须输出所有解中p最小的解。
裁判测试程序样例:
#include<stdio.h> int isPrime( int x ); void Goldbach( int n ); int main() { int n; scanf("%d",&n); if(n%2==0) Goldbach( n ); return 0; } /* 请在这里填写答案 */
输入样例:
80
输出样例:
80=7+73
相关限制:
代码长度限制16KB 时间限制400ms 内存限制64MB 栈限制8192KB
答案:
int isPrime( int x ) { int i; if(x==1) return 0; for(i=2;i<x;i++) { if(x%i==0) { return 0; } } return 1; } void Goldbach( int n ) { int i; for(i=0;i<n;i++) { if(isPrime(i)&&isPrime(n-i)) { printf("%d=%d+%d",n,i,n-i); break; } } }
1-4 sdut-C语言实验-计算组合数
任务描述:
给出两个数 n, m。求
和
。
计算公式:
输入数据有多组(数据组数不超过 250),到 EOF 结束。对于每组数据,输入两个用空格隔开的整数 n, m (0 <= m <= n <= 20) 。对于每组数据输出一行,
和
,用空格隔开。提醒:因为n!和 m! 数据较大,定义数据类型应用 long long int,输出格式%lld
函数接口定义:
long long int f(long long int n);
其中 n
是用户传入的参数。函数须返回n!的值。
裁判测试程序样例:
#include <stdio.h> long long int f(long long int n); int main() { long long int n,m,i; while(~scanf("%lld %lld",&n,&m)) { long long int a,c; a=f(n)/f(n-m); c=f(n)/f(n-m)/f(m); printf("%lld %lld\n",a,c); } return 0; } /* 请在这里填写答案 */
输入样例:
1 1 5 3 4 3
输出样例:
1 1 60 10 24 4
相关限制:
代码长度限制16KB 时间限制400ms 内存限制64MB 栈限制8192KB
答案:
long long int f(long long int n) { int i; if(n==0||n==1) return 1; else return n*f(n-1); }
1-5 sdut-C语言实验-字符串逆序
任务描述:
将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。
输入格式:
输入包括一行。第一行输入的字符串。
输出格式:
输出转换好的逆序字符串。
输入样例:
I am a student
输出样例:
tneduts a ma I
相关限制:
代码长度限制16KB 时间限制400ms 内存限制64MB 栈限制8192KB
答案:
#include <stdio.h> #include int main () { char s[101]; int i,l; gets(s); l=strlen(s); for(i=l-1;i>=0;i--) { printf("%c",s[i]); } return 0; }
1-6 sdut-C语言实验- 全字母句
任务描述:
全字母句 (pangram) 指包含字母表中全部 26 种英文字母(不区分大小写)的句子,其常被用于展示英文字体的显示效果。要求输入多个句子,请编程判断哪些句子是全字母句。
输入格式:
输入数据有多组(数据组数不超过 100)。
每组数据包含一行长度不超过 100 的字符串。
输出格式:
对于每组数据,输出一行。
如果是全字母句则输出 “Yes”,否则输出 “No”(不包括引号)。
输入样例:
在这里给出一组输入。例如:
The quick brown fox jumps over the lazy dog. The 6th ACM Funny Programming For/While Contest
输出样例:
在这里给出相应的输出。例如:
Yes No
相关限制:
代码长度限制16KB 时间限制400ms 内存限制64MB 栈限制8192KB
答案:
#include <stdio.h> int main () { char s[101]; int i,j,k; while(gets(s)) { k=0; for(i=0;s[i]!='\0';i++) { if(s[i]>='A'&&s[i]<='Z') s[i]+=32; } for(j='a';j<='z';j++) { for(i=0;s[i]!='\0';i++) { if(s[i]==j) { k++; break; } } } if(k==26) { printf("Yes\n"); } else printf("No\n"); } return 0; }
1-7 sdut – C语言实验-保留字母
任务描述:
编一个程序,输入一个允许带空格的字符串,将组成字符串的所有非英文字母的字符删除后输出。
输入格式:
一个字符串,长度不超过80个字符。
输出格式:
删掉非英文字母后的字符串。
输入样例:
在这里给出一组输入。例如:
abc123+xyz.5
输出样例:
在这里给出相应的输出。例如:
abcxyz
相关限制:
代码长度限制16KB 时间限制400ms 内存限制64MB 栈限制8192KB
答案:
#include <stdio.h> int main () { char s[81]; int i; gets(s); for(i=0;s[i]!='\0';i++) { if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')) { printf("%c",s[i]); } } return 0; }
1-8 sdut-C语言实验- 虎子认识新朋友之字符串排序
任务描述:
虎子寒假加入了一个实验室,认识了3个新同学,他决定将同学的名字按字母顺序存储到自己的电子通讯录上。你知道如何编程实现吗?请编程实现:输入3个字符串,按字典序从小到大进行排序。
输入格式:
输入数据有一行,分别为3个字符串,用空格分隔,每个字符串长度不超过100。
输出格式:
输出排序后的三个字符串,用空格分隔。
输入样例:
在这里给出一组输入。例如:
abcd cdef bcde
输出样例:
在这里给出相应的输出。例如:
abcd bcde cdef
相关限制:
代码长度限制16KB 时间限制400ms 内存限制64MB 栈限制8192KB
答案:
#include <stdio.h> #include <string.h> int main () { char a[3][101],t[101]; int i,j; for(i=0;i<3;i++) { scanf("%s",a[i]); } for(i=0;i<2;i++) { for(j=0;j<2-i;j++) { if(strcmp(a[j],a[j+1])>0) { strcpy(t,a[j]); strcpy(a[j],a[j+1]); strcpy(a[j+1],t); } } } for(i=0;i<2;i++) { printf("%s ",a[i]); } printf("%s",a[i]); return 0; }