本人能力有限,发出只为帮助有需要的人。
建议同学们自己写完后再进行讨论。
第三题后难度明显下降,所以后面的就一起发了
4. (程序题)
题目编号:Exp04-Basic04,GJBook3-06-19
题目名称:删除重复元素
题目描述:编写函数,不使用其他辅助数组,把整型数组中重复元素删得只剩一个;所有未被删除元素都保留最先顺序移动到数组前面。
输入:第一行输入数组长度n(≤100),第二行依次从键盘随机输入n个整数作为数组元素值。
输出:已删除重复元素的数组,各元素间以一个西文空格间隔,最后一个元素后无字符。
样例1:
输入: 10 1 1 2 3 3 3 2 1 2 4
输出: 1 2 3 4
样例2:
输入: 10 1 0 2 2 2 2 2 2 2 2
输出: 1 0 2
#include
int main(void)
{
int a[100],n,i,j,k,flag=0,tem=10000;
scanf("%d",&n);
for(i=0;i(n-flag))//flag计算删除元素的次数
break;
for(j=n-1;j>i;j--)
{
while(a[j]==a[i])
{
if(j==n-1)
a[j]=tem-1;//引入tem使得flag正常计算
for(k=j;k
5. (程序题)
题目编号:Exp04-Basic05,GJBook3-06-06
题目名称:转移0元素
题目描述:编写程序,不使用其他辅助数组,把给定整型数组中所有0元素全部移到后面,且所有非0元素的顺序不变。
输入:第一行输入数组长度n(≤100),第二行依次从键盘随机输入n个整数作为数组元素值。
输出:已将所有0元素串到后面的整数数组,各元素间以一个西文空格间隔,最后一个元素后无字符。
样例1:
输入:
10
0 3 1 0 0 0 1 2 3 0
输出:
3 1 1 2 3 0 0 0 0 0
样例2:
输入:
10
0 0 0 0 0 0 1 2 3 4
输出:
1 2 3 4 0 0 0 0 0 0
#include
int main(void)
{
int a[100],n,i,j,num,flag=0;
scanf("%d",&n);
num=n;//num为数组非零的长度
for(i=0;i
6. (程序题)
题目编号 :Exp04-Basic06,GJBook3-06-04
题目名称:循环右移
题目描述:编写程序,不使用其它辅助数组,把一维整型数组中的各个元素循环右移j位。
输入:
第一行输入两个整数,n表示数组长度(0=0);
第二行依次从键盘随机输入n个整数作为数组元素值。
输出:
循环右移后的整数数组,各元素间以一个西文空格间隔,最后一个元素后无字符。
样例1:
输入:
10 2
1 2 3 4 5 6 7 8 9 0
输出:
9 0 1 2 3 4 5 6 7 8
样例2:
输入:
10 23
1 2 3 4 5 6 7 8 9 0
输出:
8 9 0 1 2 3 4 5 6 7
#include
int main(void)
{
int a[100],n,j,i,flag=0;
scanf("%d %d",&n,&j);
for(i=0;in的情况
for(i=n-j;i
7. (程序题)
题目编号:Exp04-Basic07,GJBook3-06-01
题目名称:检验矩阵重复元素
题目描述:编写程序判断任意给定n*n的两维整型数组中是否有相同元素。
输入:第一行输入数组行数n(≤10),第二行随机输入n*n个整数作为数组元素值。
输出:如果数组中有相同元素,则输出YES;否则,输出NO。
样例1:
输入:
3
1 2 3 4 5 6 7 8 9
输出:
NO
样例2:
输入:
3
1 1 2 3 4 5 6 7 8
输出:
YES
#include
int main(void)
{
int a[100],n,i,j,flag=1;
scanf("%d",&n);
for(i=0;i
8. (程序题)
题目编号: Exp04-Basic08,GJBook3-06-03
题目名称: 矩阵转置
问题描述: 编写程序,将任意给定n*n的两维整型数组转置。
输入:第一行输入数组行数n(≤10),第二行随机输入n*n个整数作为数组元素值。
输出:按先行后列、从左至右的顺序输出转置后数组内的所有元素,每行n个元素,同一行内的各元素间以一个西文空格间隔;每行最后一个元素除必要的回车换行符外无其它字符。
样例1:
输入:
3
1 2 3
1 2 3
1 2 3
输出:
1 1 1
2 2 2
3 3 3
样例2:
输入:
3
1 1 1
2 2 2
3 3 3
输出:
1 2 3
1 2 3
1 2 3
#include
int main(void)
{
int a[10][10],i,j,n;//利用两个数组
scanf("%d",&n);
for(i=0;i
9. (程序题)
题目编号:Exp04-Basic09,GJBook3-06-02
题目名称:检验矩阵主对角线对称
题目描述:编写程序,判断任意给定n*n的两维整型数组是否关于主对角线对称。
输入:第一行输入数组行数n(≤10),第二行随机输入n*n个整数作为数组元素值。
输出:如果数组关于主对角线对称,则输出YES;否则输出NO。
样例1:
输入:
3
1 2 3
2 1 2
3 2 1
输出:
YES
样例2:
输入:
3
0 0 1
2 1 2
3 2 1
输出:
NO
#include
int main(void)
{
int a[10][10],i,j,n,x,flag=0;
scanf("%d",&n);
for(i=0;i
10. (程序题)
题目编号:Exp04-Basic10,GJBook3-06-12
题目名称:字符串反序
问题描述:编写程序,将给定的字符串反序输出。
输入:一个长度不超过255的字符串,字符串中可能含有空白字符。
输出:反序输出的字符串。
样例1:
输入 A 输出 A
样例2:
输入 123 45 输出 54 321
#include
#include
int main(void)
{
char ch[255];
int i,n;
gets(ch);//和scanf("%s",ch)先比,gets可以输入空格
n=strlen(ch);//strlen为得到字符串的长度
for(i=n-1;i>=0;i--)
printf("%c",ch[i]);
return 0;
}
11. (程序题)
题目编号:Exp04-Enhance01,GJBook3-06-25
题目名称:规则形式构建集合
题目描述:
设整数集合 M 定义如下:
(1) 1∈M ;
(2) 若 x ∈M , 则 2x+1 ∈M , 3x+1 ∈M ;
(3) 没有别的整数属于集合 M 。
编程序按递增顺序生成并输出集合 M 的前n项
输入:一个正整数n(≤300)。
输出:按递增序列输出n个属于集合M的整数,各数间以一个西文空格间隔;最后一个数后无字符。
样例1:
输入:10
输出:1 3 4 7 9 10 13 15 19 21
样例2:
输入:1
输出:1
#include
int main(void)//此方法使用除法
{
int a[1000],n,i,j,k,l,m,x,y,flag=0;//数组要开大一些,分配多些内存
scanf("%d",&n);
a[0]=1;
printf("1");
k=1;
for(i=3;i<7*n;i++)
{
j=i;x=0;y=0;
if((i-1)%2==0)//分别考虑*2+1和*3+1的情况
x=(i-1)/2;
if((i-1)%3==0)
y=(i-1)/3;
for(m=0;m
12. (程序题)
题目编号 :Exp04-Enhance02,GJBook3-06-26
题目名称:约瑟夫问题(Josephus)
题目描述:
古代某法官要判决 n 个犯人死刑, 他有一条荒唐的逻辑, 将犯人首尾相接排成圆圈,所有计数从1开始; 然后从第 s 个人开始数, 每数到第 m 个犯人,则拉出来处决; 然后再数 m 个,数到的犯人再处决;... ; 但剩下的最后一个犯人可以赦免。编程序,给出处决顺序,并告知哪一个人活下来。
输入:三个正整数 n(≤1000),s和m,都可以使用int类型变量表示。
输出:依次输出被处决人员的编号,每个编号之间用一个西文空格间隔,最后一个编号后无字符。
样例:
输入:6 1 5
输出:5 4 6 2 3 1
#include
int main()
{
int a[10000],n,k,s,m,i,j,num,flag=0;
scanf("%d %d %d",&n,&s,&m);
for(i=0;i=1)
{
k=k+m-1;//从1开始计数或者弹出一个数,计数减一
while(k>=num)//将k取模
k%=num;
if(flag)//控制空格
printf(" ");
printf("%d",a[k]);
flag=1;
for(j=k+1;j
13. (程序题)
题目编号 :Exp04-Enhance03,freshman-1006
题目名称:英文翻译自然数
题目描述:按常规英文输出1000以内自然数的英文读法。
输入:每个测试输入包含 1 个测试用例,给出正整数 n(0<= n <1000)
输出:输出占一行:如果 0<= n <1000, 用规定的格式输出 n,所有英文单词小写,最后一个单词后无字符;否则输出ERR。
样例:
输入:123
输出:one hundred and twenty-three
#include
#include
int main(void)
{
int n,x1,x2,x3,flag=0,i;
char *ToNineteen[20]={"zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventy","eighteen","nineteen"};
char *ToNinety[8]={"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
scanf("%d",&n);
// for(i=0;i<1000;i++) //用for循环可以快速检查1000个数那个出错
// {
// flag=0;
// n=i;
if(n==0)//0的情况最好单独提出
printf("zero");
else if(n%100==0)
{
x1=n/100;
flag=1;//flag控制空格
printf("%s",ToNineteen[x1]);
printf(" hundred");
}
else if(n>100)
{
x1=n/100;
n%=100;
flag=1;
printf("%s",ToNineteen[x1]);
printf(" hundred and");//注意and的运用
}
if(n<=19&&n>0)//排除0的情况
{
if(flag)
printf(" ");
printf("%s",ToNineteen[n]);
}
else if(n>19&&n<100)
{
if(n%10==0)
{
x2=n/10;
if(flag)
printf(" ");
printf("%s",ToNinety[x2-2]);//ToNinety的char数组中没有0和10
}
else
{
x3=n%10;
x2=(n-x3)/10;
if(flag)
printf(" ");
if(x3==0)
printf("%s",ToNinety[x2-2]);//ToNinety的char数组中没有0和10
else
{
printf("%s-",ToNinety[x2-2]);//注意十位和个位之间的-
printf("%s",ToNineteen[x3]);
}
}
}
// printf("\n");
//}
}
你可能感兴趣的:(c语言)