程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 4550

hdu 4550

編輯:C++入門知識

每取一個數字盡量把小數字往左放,當遇到0時要在後面的卡片找不大於首位的卡片,

如果找到,就把0放到左邊(標記該卡片的位置),否則放右邊,

注意:第一個數字可能就為0.

 

 


[cpp]
#include<stdio.h>  
#include<string.h>  
char s[110],str[210]; 
int main() 

    int i,j,n,k,t,len; 
    char *p,*q,ch,ph; 
    scanf("%d",&t); 
    while(t--) 
    { 
        scanf("%s",s); 
        len=strlen(s); 
        str[101]=s[0]; 
        p=q=&str[101]; 
        ch=p[0]; 
        k=0;//比首位非0數字小的數字最靠後的位置  
        if(ch=='0')//如果第一個數為0,找非0的數字  
        { 
            ph='9'; 
            for(j=1;j<len;j++) 
                if(s[j]<=ph&&s[j]!='0') 
                {k=j;ph=s[j];} 
            if(k==0)//如果沒有,結果為0;  
            {printf("0\n");continue;} 
        } 
        for(i=1;s[i];i++) 
        { 
            if(i==k)//遇到被被標記的數字必須放首位  
            { 
                p--;p[0]=s[k]; 
                ch=p[0]; 
                k=0;continue; 
            } 
            if(s[i]!='0')//非0數字跟首位比較  
            { 
                if(s[i]<=p[0])//如果小於首位,則更新首位  
                { 
                    p--;p[0]=s[i]; 
                    ch=p[0]; 
                } 
                else {q++;q[0]=s[i];}//加入末位  
            } 
            else //找有沒有比最靠前的非0數字小的數字  
            {        
                ph=ch; 
                for(j=i+1;j<len;j++) 
                    if(s[j]<=ph&&s[j]!='0') 
                    {k=j;ph=s[j];} 
                if(k==0) 
                {q++;q[0]=s[i];}//沒有,0加入末位  
                else  
                {p--;p[0]=s[i];}//找到就加入首位  
            } 
        } 
        q++;q[0]=0; 
        printf("%s\n",p); 
    } 
    return 0; 

#include<stdio.h>
#include<string.h>
char s[110],str[210];
int main()
{
 int i,j,n,k,t,len;
 char *p,*q,ch,ph;
 scanf("%d",&t);
 while(t--)
 {
  scanf("%s",s);
  len=strlen(s);
  str[101]=s[0];
  p=q=&str[101];
  ch=p[0];
  k=0;//比首位非0數字小的數字最靠後的位置
  if(ch=='0')//如果第一個數為0,找非0的數字
  {
   ph='9';
   for(j=1;j<len;j++)
    if(s[j]<=ph&&s[j]!='0')
    {k=j;ph=s[j];}
   if(k==0)//如果沒有,結果為0;
   {printf("0\n");continue;}
  }
  for(i=1;s[i];i++)
  {
   if(i==k)//遇到被被標記的數字必須放首位
   {
    p--;p[0]=s[k];
    ch=p[0];
    k=0;continue;
   }
   if(s[i]!='0')//非0數字跟首位比較
   {
    if(s[i]<=p[0])//如果小於首位,則更新首位
    {
     p--;p[0]=s[i];
     ch=p[0];
    }
    else {q++;q[0]=s[i];}//加入末位
   }
   else //找有沒有比最靠前的非0數字小的數字
   {  
    ph=ch;
    for(j=i+1;j<len;j++)
     if(s[j]<=ph&&s[j]!='0')
     {k=j;ph=s[j];}
    if(k==0)
    {q++;q[0]=s[i];}//沒有,0加入末位
    else
    {p--;p[0]=s[i];}//找到就加入首位
   }
  }
  q++;q[0]=0;
  printf("%s\n",p);
 }
 return 0;
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved