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;
}