Happy第四周题解

练习题题解:
6-1

void proceed(int *a, int *b, int size, void (*fp)(int x, int y)){
	for(int i=0; i<size; i++) (*fp)(*(a+i),*(b+i));
}

6-2

void tian(int (*p)[n]) {
    for(int i=0;i<n;i++) {
        for(int j=0;j<n;j++){
            if(i+j==n-1)
                p[i][j]=1;
            else if(i+j>n-1)
                p[i][j]=2;
            else
                p[i][j]=3;
        }
    }
}

6-3

int getTreasure(int *pBucket, int x, int y)
{
	if(x%2==0){
		if(y%2==0){
			*pBucket+=5;
			return 1;
		}
		else{
			*pBucket+=0;
			return 0;
		} 
	}
	else{
		if(y%2==0){
			*pBucket+=0;
			return 0;
		} 
		else{
			*pBucket+=*pBucket/3;
			return 1;
		}
	}
} 

6-4

int gys(int m,int n){
    return n?  gys(n,m%n):m;
}

7-1

#include <stdio.h>
int main(){
    printf("2018\nwo3 men2 yao4 ying2 !");
    return 0;
}

7-2

#include <stdio.h>
int max(int a,int b){
    return a>b?a:b;
}
int main(){
    int a[3][5];

    for(int i=0;i<3;i++){
        int ans=0;
        int m=-(1<<29);
        for(int j=0;j<3;j++){
            scanf("%d",&a[i][j]);
            ans+=a[i][j];
            m=max(a[i][j],m);
        }
        a[i][3]=m;
        a[i][4]=ans;
    }
    for(int i=0;i<3;i++){
        for(int j=0;j<5;j++){
            printf("%4d",a[i][j]);
        }
        if(i!=2)
        printf("\n");
    }
    return 0;
}

7-3

#include<stdio.h>
#include<stdlib.h>
int sum=0;
void wz(int(*p)[20],int m,int n);
int main(){
	int m,n;
	scanf("%d%d",&m,&n);
	scanf("\n");
	char a;
	int b[20][20];
	for(int i=0;i<m;i++){
		for(int j=0;j<n;j++){
			a=getchar();
			if(a=='#')
			b[i][j]=2;
			else if(a=='0'){
			b[i][j]=0;
			}	
			scanf("\n");
		}
	}
	int num;
	scanf("%d",&num);	
	int p[400];
	int x,y;	
	for(int i=0;i<num;i++){
		sum=0;
		scanf("%d%d",&x,&y);
		if(b[x][y]!=0){
			b[x][y]=0;
			sum++;
		}	
		if(((x-1)>=0)&&((x-1)<m))
		wz(b,x-1,y);
		if(((y-1)<n)&&((y-1)>=0))
		wz(b,x,y-1);
		if(((x+1)<m)&&((x+1)>=0))
		wz(b,x+1,y);
		if(((y+1)<n)&&((y+1)>=0))
		wz(b,x,y+1);
	    p[i]=sum;
	}
	for(int i=0;i<num;i++){
		printf("%d\n",p[i]);
	}
	return 0;	
}
void wz(int(*p)[20],int m,int n)
{ 
    if(p[m][n]==2){
        p[m][n]=1; 
    }
    else if(p[m][n]==1){
        sum++;
        p[m][n]=0;
    }
}

7-4(这是某19级同学写的代码)

#include<stdio.h>
char a[256];
int main()
{
	int n,i,s;
	while (scanf("%d",&n)!=EOF) {
        int A=0,G=0,C=0,T=0;
        getchar();
		gets(a);
		if (n%4!=0) {printf("-1\n");continue;}
		s=n/4;
		for (i=0;i<n;i++) {
			switch(a[i]){
				case 'A':A++;break;
				case 'G':G++;break;
				case 'C':C++;break;
				case 'T':T++;break;
			}
		}
		if (A>s||G>s||C>s||T>s) {printf("-1\n");continue;}
		A=s-A;G=s-G;C=s-C;T=s-T;
		for (i=0;i<n;i++) {
			if (a[i]!='?') printf("%c",a[i]);
			else {
				if (A>0) {printf("A");A--;}
				else if (C>0) {printf("C");C--;}
				else if (G>0) {printf("G");G--;}
				else if (T>0) {printf("T");T--;}
			}
		}
        printf("\n");
	}
	return 0;
}

7-5

#include <stdio.h>
#include <string.h>
char a[200];
typedef enum bool{false,true} bool;
bool ong(int p){
    if(a[p-1]=='g'&&p-2>=0&&a[p-2]=='n'&&p-3>=0&&a[p-3]=='o')
        return true;
    return false;
}
int main(){
    int t;
    scanf("%d\n",&t);
    while (t--){
        gets(a);
        int f=0;
        int d=strchr(a,',')-a;
        int j=strchr(a,'.')-a;
        if(ong(d)==false||ong(j)==false){
            printf("Skipped\n");
            continue;
        }
        int n;
        int sum=0;
        for(int i=strlen(a)-1;i>=0;i--){
            if(a[i]==' ')
                sum++;
            if(sum==3){
                n=i;
                break;
            }
        }
        for(int i=0;i<=n;i++)
            printf("%c",a[i]);
        printf("qiao ben zhong.\n");
    }
    return 0;
}

7-6

#include <stdio.h>
#include <string.h>
char a[200];
char b[200][200];
int k[200];
typedef enum bool{false,true} bool;
int change(int p){
    int ans=0;
    while(1){
        if(p/10==0)
            break;
        while(p){
            ans+=p%10;
            p/=10;
        }
        p=ans;
        ans=0;
    }
    return p;
}
int main(){
    int t;
    scanf("%d\n",&t);
    while (t--){
        memset(b,0, sizeof(b));
        gets(a);
        for(int i=0;i<strlen(a);i++){
            b[i/6][i%6]=a[i];
        }
        int n=strlen(a)/6;
        for(int i=0;i<6;i++){
            k[i]=0;
            for(int j=0;j<=n;j++)
                k[i]+=b[j][i];
        }
        for(int i=0;i<6;i++)
            k[i]=change(k[i]);
        for(int i=0;i<6;i++)
            printf("%d",k[i]);
        printf("\n");
    }
    return 0;
}

限时训练题解:
7-1

#include<stdio.h>
int main(){
	int n;
	scanf("%d",&n);
	int z;
	int i=0;
	int s=0;
	for(int x=0;x<=300;x++){
		for(int y=0;y<=500;y++){
			z=n-x-y;
			if(z>=0&&(15*x+9*y+z==n*3)){
				i++;
				s+=x;
			}	
		}
	}
	if(!i)
	s=-1;
	printf("%d %d",i,s);
	return 0;	
} 

7-2

#include<stdio.h>
#include<math.h>
int isss(int n){
	for(int i=2;i<=sqrt(n);i++){
		if(n%i==0)
		return 0;
	}
	return 1;
}
int main(){
	int n;
	scanf("%d",&n);
	int f=0;
	if(n==0||n==1){
		printf("3 5");
		goto a;
	}
	if(n<0){
	  printf("3 5");
	  goto a;
	}
	for(int i=n+1;;i++){
		if(isss(i)){
			if(isss(i+2)){
				printf("%d %d",i,i+2);
				f=1;
			}
		}
		if(f)
		break;
	}
	a:
	return 0;
} 

7-3

#include<stdio.h>
#include<math.h>
int main()
{
	int L,N;
	scanf("%d%d",&L,&N);
	double M=pow(26,L)-N;
	int m=(int)M;
	char ch[6];
	int i=0;
	while(L--)
	{
		ch[i++]='a'+m%26;
		m/=26;
	}
	for(int j=i-1;j>=0;j--)
	printf("%c",ch[j]);
	return 0;
}

7-4

#include<stdio.h>
int main(){
	int happy=0;
	int unhappy=0;
	int sad=0;
	int money=0;
	char a;
	while((a=getchar())!='$'){
	    if(happy){
	    	happy--;
	    	if(sad)
	    	sad--;
	    	if(unhappy)
	    	unhappy--;
	    }
		else{
			if(unhappy&&sad){
				putchar('-');
				unhappy--;
				sad--;
				continue;
			}
			else if(unhappy&&(!sad)){
				putchar('-');
				unhappy--;
				continue;
			}
			else if((!unhappy)&&sad){
				putchar('-');
				sad--;
				continue;
			}
		}		
		if(a=='X'){
			putchar('U');
			unhappy=1;
		}
		else if(a=='T'){
			putchar('D');
			money+=7;
			sad=2;
		}
		else{
			putchar('!');
			happy=2;
			money-=3;
		}	
	}
	printf("\n%d\n",money);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值