PTA--练习6

目录

实验7-2-9 螺旋方阵

实验7-2-10 简易连连看

实验7-3-5 凯撒密码

实验7-3-6 字符串转换成十进制整数

实验7-3-7 字符转换

实验7-3-9 删除重复字符


实验7-2-9 螺旋方阵

//怎么做呢
//慢慢找规律
//第一行:1--N
//第二行:4N-4--4N-1

//整个矩阵加上下左右四个边框,沿着上右下左的顺序在边框上输入

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

int main(){

    int N;
    scanf("%d",&N);
    int a[N][N];
    int num=1;
    int left,down;
    int up=left=0,right=down=N-1;

    while(num<=N*N){
        for(int i=left;i<=right;i++){//第一个圈,从上面开始,从左到右
            a[up][i]=num;
            num++;
        }
        up++;
        for(int i=up;i<=down;i++){//第一个圈,右边,从上到下
            a[i][right]=num;
            num++;
        }
        right--;
        for(int i=right;i>=left;i--){//第一个圈,下边,从右到左
            a[down][i]=num;
            num++;
        }
        down--;
        for(int i=down;i>=up;i--){//第一个圈,左边,从下到上
            a[i][left]=num;
            num++;
        }
        left++;
    }

    for(int i=0;i<N;i++){
        for(int j=0;j<N;j++){   
            printf("%3d",a[i][j]);
        }
        printf("\n");
    }

    return 0;
}

实验7-2-10 简易连连看

PTA | 程序设计类实验辅助教学平台


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

int main(){


    int N;
    scanf("%d\n",&N);//一定要有这个换行,不然会被当成字符读入
    char a[8][8];
    for(int i=0;i<2*N;i++){
        for(int j=0;j<2*N;j++){
            scanf("%c ",&a[i][j]);
        }
    }
//二维字符串的初始化
    int K;
    scanf("%d",&K);
    int cnt=1;
    int x1,x2,y1,y2;
    int sum=0;
    int xiao=0;
    haha:
    while(cnt<=K){
        scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
        cnt++;
        x1--;
        x2--;
        y1--;
        y2--;
        if(a[x1][y1]==a[x2][y2]&&xiao==2*N*N-1){
            printf("Congratulations!");
            break;
        }
        if(a[x1][y1]==a[x2][y2]&&a[x1][y1]!='*'){
            xiao++;
            a[x1][y1]='*';
            a[x2][y2]='*';
            for(int i=0;i<2*N;i++){
                for(int j=0;j<2*N;j++){
                    if(j<2*N-1){
                        printf("%c ",a[i][j]);
                    }else{
                        printf("%c",a[i][j]);
                    }
                }
                printf("\n");
            }
        }else{
            printf("Uh-oh\n");
            sum++;
        }
        if(sum==3){
            printf("Game Over\n");
            break;
        }
        for(int i=0;i<2*N;i++){
                for(int j=0;j<2*N;j++){
                    if(a[i][j]!='*'){
                        goto haha;
                    }
                }
        }
    }

    return 0;
}


实验7-3-5 凯撒密码

//1.只有字母需要移位
//2.大写字母:65-90  ,a[i]=(a[i]-65+offset)%26+65
//3.小写字母:97-122, a[i]=(a[i]-97+offset)%26+97

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){

    char a[81]=" ";//字符串初始化
    /*char c;
    scanf("%c",&c);
    int i=0;
    while(c!='\n'){
        a[i]=c;
        i++;
        scanf("%c",&c);
    }*/
    gets(a);
    int n=strlen(a);
    int offset;
    scanf("%d",&offset);
    offset=offset%26;
    //负数的取余是计算不出来的
    for(int i=0;i<n;i++){
        if(a[i]>='A'&&a[i]<='Z'){
            int wei=(a[i]-65+offset);
            if(wei<0){
                wei=wei+26;
            }
            a[i]=wei%26+65;
        }else if(a[i]>='a'&&a[i]<='z'){
            int wei=((a[i]-97+offset));
            if(wei<0){
                wei=wei+26;
            }
            a[i]=wei%26+97;
        }
    }
    printf("%s",a);
    
    return 0;
}

实验7-3-6 字符串转换成十进制整数

//十六进制:0-9,a,b,c,d,e,f
//+-P-xf4+-1!#
//-f41
//=1+4*16+15*16*16=3905
//'0'=48

//只保留第一个遇见的x或者X后面的0-9,a,b,c,d,e,f

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
    
	char ch;
	int sum=0,flag=1,isAppear=0;
    
	ch=getchar();
	while(ch!='#'){
        
		if(ch=='-'&&!isAppear){
            flag=-1;
        }else if(ch>='a'&&ch<='f'||ch>='A'&&ch<='F'||ch>='0'&&ch<='9'){
                isAppear=1;
                if(ch>='a'&&ch<='f'){
                    sum=sum*16+ch-'a'+10;
                }else if(ch>='A'&&ch<='F'){ 
                    sum=sum*16+ch-'A'+10;
                }else if(ch>='0'&&ch<='9') 
                    sum=sum*16+ch-'0';
		}
		ch=getchar();
	}
	printf("%d",flag*sum);
	return 0;
}

 
实验7-3-7 字符转换


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
    
	char ch;
	ch=getchar();
    int flag=0;
    int len=0;
	while(ch!='\n'){
        if(flag==0){
            if(ch>'0'&&ch<='9'){
            flag=1;
            printf("%c",ch);
            len++;
            }
        }else{
            if(ch>='0'&&ch<='9'){
                printf("%c",ch);
                len++;
            }
        }
		ch=getchar();
	}
    if(len==0){
        printf("0");
    }
	
	return 0;
}

 实验7-3-9 删除重复字符

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int cmp(const void* a,const void* b){
    return *(char*)a-*(char*)b;
}
int main(){
    
	char str[81]="";
    char out[81]="";
    gets(str);
    int n=strlen(str);

    qsort(str,n,sizeof(char),cmp);
    int j=0;
    out[j++]=str[0];
    for(int i=1;i<n;i++){
        int flag=1;
        if(str[i]!=str[i-1]){
            out[j++]=str[i];
        }
    }
    printf("%s",out);
	return 0;
}

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西柚小萌新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值