zoukankan      html  css  js  c++  java
  • 近日做题题解总结

    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]!='';i++)
    		{
    			if(s[i]=='-'&&i!=0&&s[i+1]!=''){
    				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]='';
    				}
    				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]='';
    							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]='';
    					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]='';
    					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
    ");
    		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
    ",flag);
    	return 0;
    }
    int cmp(const void *x, const void *y)
    {
    	return *(int*)x-*(int*)y;
    }
    

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

  • 相关阅读:
    HDU 2188.悼念512汶川大地震遇难同胞——选拔志愿者-巴什博奕
    hdu 4217 Data Structure? 树状数组求第K小
    hdu 5137 How Many Maos Does the Guanxi Worth 最短路 spfa
    Codeforces Round #375 (Div. 2) C. Polycarp at the Radio 贪心
    Codeforces Round #375 (Div. 2) D. Lakes in Berland dfs
    hiho 1325 : 平衡树·Treap
    bzoj 2656 [Zjoi2012]数列(sequence) 递推+高精度
    Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) C. Destroying Array
    Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) D. Generating Sets 贪心+优先队列
    Codeforces Round #374 (Div. 2) A , B , C 水,水,拓扑dp
  • 原文地址:https://www.cnblogs.com/ponynice/p/12288063.html
Copyright © 2011-2022 走看看