近日做题题解总结

P1540 机器翻译题解

因为没有理解题目,在做题过程中遇到了许多困难。本人感觉要注意一下几点:
1.当a数组中还未存入b数组的元素若已在b数组中出现,就不应再存入b数组中。2.要先判断再进行b数组的储存。3.将b数组中的元素往前移一位时应当记得给最后一个元素赋值。

#include<stdio.h>
int main()
{
    int N,M,a[1005],b[1000],j,flag=1,t,i,z=1;
    scanf("%d%d",&M,&N);
    for(i=0;i<N;i++)
        {
            scanf("%d",&a[i]);
        }
    b[0]=a[0];
    for(i=1;i<N;i++)
        {
            if(z<M){
                
                
                    for(t=0;t<z;t++)
                        {
                        if(a[i]==b[t])break;
                        }
                if(t==z){
                    flag++;
                    b[z]=a[i];
                    z++;
                }
                
            }//数组b未存满的情况
            else{
                
                    
                for(t=0;t<M;t++)
                    {
                        if(a[i]==b[t])break;
                    }
                if(t==M){
                    flag++;
                    for(j=1;j<M;j++)
                    {
                        b[j-1]=b[j];
                    }
                    b[j-1]=a[i];
                }
            }
         } //数组b已存满的情况
    printf("%d",flag);
    return 0;
}

P1098 字符串的展开题解

会有几种比较坑人的情况:
1.开头或者末尾出现'-'。2.出现连续的连字符。3.连字符两端可能不一致,比如数字和字母,大写字母和小写字母。(出现这种情况连字符就保留原样,不用再改变什么了。)
由于我太菜了,没有很好地掌握三目运算符,写的代码分的情况较多也比较长。

#include<stdio.h>
#include<string.h> 
int main()
{
    char s[10000],y;
    int p1,p2,p3,x,r,t,j,i,n;
    scanf("%d%d%d",&p1,&p2,&p3);
    scanf("%s",s);
    for(i=0;s[i]!='\0';i++)
        {
            if(s[i]=='-'&&i!=0&&s[i+1]!='\0'){
                if(s[i+1]-s[i-1]==1){
                    x=strlen(s);
                    for(j=i;j<x;j++)
                        {
                            s[j]=s[j+1];
                            
                        }
                    s[x-1]='\0';
                }
                else if(s[i+1]-s[i-1]>1){
                        t=s[i+1]-s[i-1]-1;
                        x=strlen(s);
                        n=x;
                        if(s[i-1]>=65&&s[i-1]<=90&&s[i+1]>=65&&s[i+1]<=90){
                        for(j=x+p2*t-2,r=0;r<x-i;r++)
                                {
                                    s[j]=s[n-1];
                                    n--;
                                    j--;
                                }
                        s[x+p2*t-1]='\0';
                            if(p1==1){
                                if(p3==1){
                                    for(n=p2,r=0,j=i,y=s[i-1];r<t*p2;r++)
                                        {
                                            s[j]=y+1+32;
                                            j++;
                                            n--;
                                            if(n==0){
                                                y++;
                                                n=p2;
                                            }
                                            }   }
                                else{
                                    for(n=p2,r=0,j=i+p2*t-1,y=s[i-1];r<p2*t;r++)
                                        {
                                            s[j]=y+1+32;
                                            j--;
                                            n--;
                                            if(n==0){
                                                y++;
                                                n=p2;
                                            }
                                    }
                                            
                                        }
                                
                            }
                            else if(p1==2){
                                if(p3==1){
                                    for(n=p2,r=0,j=i,y=s[i-1];r<=t;r++)
                                        {
                                            s[j]=y+1;
                                            j++;
                                            n--;
                                            if(n==0){
                                                y++;
                                                n=p2;
                                            }
                                            }   }
                                else{
                                    for(n=p2,r=0,j=i+p2*t-1,y=s[i-1];r<p2*t;r++)
                                        {
                                            s[j]=y+1;
                                            j--;
                                            n--;
                                            if(n==0){
                                                y++;
                                                n=p2;
                                            }
                                    }
                                            
                                        }
                            }
                            else{
                                for(j=i;j<i+p2*t;j++)
                                    {
                                        s[j]='*';
                                    }
                            }
                        }//两端都是大写字母的情况
                    
                else if(s[i-1]>=97&&s[i-1]<=122&&s[i+1]>=97&&s[i+1]<=122){
                    for(j=x+p2*t-2,r=0;r<x-i;r++)
                                {
                                    s[j]=s[n-1];
                                    n--;
                                    j--;
                                }
                    s[x+p2*t-1]='\0';
                    if(p1==1){
                                if(p3==1){
                                    for(n=p2,r=0,j=i,y=s[i-1];r<p2*t;r++)
                                        {
                                            s[j]=y+1;
                                            j++;
                                            n--;
                                            if(n==0){
                                                y++;
                                                n=p2;
                                            }
                                            }   }
                                else{
                                    for(n=p2,r=0,j=i+p2*t-1,y=s[i-1];r<p2*t;r++)
                                        {
                                            s[j]=y+1;
                                            j--;
                                            n--;
                                            if(n==0){
                                                y++;
                                                n=p2;
                                            }
                                    }
                                            
                                        }
                                
                            }
                            else if(p1==2){
                                if(p3==1){
                                    for(n=p2,r=0,j=i,y=s[i-1];r<p2*t;r++)
                                        {
                                            s[j]=y+1-32;
                                            j++;
                                            n--;
                                            if(n==0){
                                                y++;
                                                n=p2;
                                            }
                                            }   }
                                else{
                                    for(n=p2,r=0,j=i-1+p2*t,y=s[i-1];r<p2*t;r++)
                                        {
                                            s[j]=y+1-32;
                                            j--;
                                            n--;
                                            if(n==0){
                                                y++;
                                                n=p2;
                                            }
                                    }
                                            
                                        }
                            }
                            else{
                                for(j=i;j<i+p2*t;j++)
                                    {
                                        s[j]='*';
                                    }
                            }
                        }//两端都是小写字母的情况
                else if(s[i-1]>=48&&s[i-1]<=57&&s[i+1]>=48&&s[i+1]<=57){
                    for(j=x+p2*t-2,r=0;r<x-i;r++)
                                {
                                    s[j]=s[n-1];
                                    n--;
                                    j--;
                                }
                    s[x+p2*t-1]='\0';
                    if(p1==3){
                        for(j=i;j<i+p2*t;j++)
                                    {
                                        s[j]='*';
                                    }
                    }
                    else{
                        if(p3==1){
                        
                            for(n=p2,r=0,j=i,y=s[i-1];r<p2*t;r++)
                                        {
                                            s[j]=y+1;
                                            j++;
                                            n--;
                                            if(n==0){
                                                y++;
                                                n=p2;
                                            }
                                            }           
                        }
                        else{
                            for(n=p2,r=0,j=i+p2*t-1,y=s[i-1];r<p2*t;r++)
                                        {
                                            s[j]=y+1;
                                            j--;
                                            n--;
                                            if(n==0){
                                                y++;
                                                n=p2;
                                            }
                                    }
                        }
                    }//两端都是数字的情况
                }   
                }
                }
            }
    printf("%s",s)  ;
    return 0;
 } 

P1478 陶陶摘苹果(升级版)题解

这道题到不是很难,主要是一个小点(数组c开得太小啦,多加一个0一下就AC了......有点无语......)一直没发现,让我一直AC不了,对这道题花了很多时间,因此想要纪念一下。梳理一下我的思路吧:
1.将陶陶可以摘到的苹果的力气值存入数组c。2.将这些存入数组c的力气值从小到大快排。3.将这些力气值累加,当累加的力气值大于陶陶所拥有的力气值时,则陶陶没力气摘苹果了。

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

int main()
{
    int cmp(const void *x, const void *y);
    int n,s,a,b,i,j,z=0,c[10000],r;
    scanf("%d%d",&n,&s);
    scanf("%d%d",&a,&b);
    for(r=0;r<n;r++)
        {
            scanf("%d%d",&i,&j);
            if(a+b>=i){
                c[z]=j;
                z++;
            }//将可摘苹果存入一个新数组
            
        }
    if(z==0){
        printf("0\n");
        return 0;
    }
    qsort(c,z,sizeof(int),cmp);
    int t=c[0],flag=0;
    for(i=1;i<z;i++)
        {
            if(t>s)break;
            
            t+=c[i];
            flag++;
        }//在力气值的基础上再判断可摘苹果的个数
    printf("%d\n",flag);
    return 0;
}
int cmp(const void *x, const void *y)
{
    return *(int*)x-*(int*)y;
}

以上就是这几天困扰我的几题题目的题解,由于本人太菜,一题就要做好久,所以题量也不是很多。

猜你喜欢

转载自www.cnblogs.com/ponynice/p/12288063.html