吉林大学 超星慕课 高级语言程序设计 实验04 数组及其在程序设计中的应用 (2022级) 程序第04一13题

本人能力有限,发出只为帮助有需要的人。

建议同学们自己写完后再进行讨论。

第三题后难度明显下降,所以后面的就一起发了

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语言)