2014年3月24日 星期一

[UVA] 11689 - Soda Surpler

/*20140325 hanting*/
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int N;
    cin>>N;
    while(N--)
    {
        int e,f,c;
        cin>>e>>f>>c;
        e+=f;
        int ans=0;
        while(e/c)
        {
            ans+=e/c;
            e=e/c+e%c;
        }
        cout<<ans<<endl;
    }
    return 0;
}

[UVA] 11192 - Group Reverse

/*20140325 hanting*/
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int N;
    while(cin>>N && N!=0)
    {
        string s;
        string ans="";
        cin>>s;
        for(int i=0;i<s.size();i+=(s.size()/N))
        {
            string ss=s.substr(i,(s.size()/N));
            reverse(ss.begin(),ss.end());
            ans+=ss;
        }
        cout<<ans<<endl;
    }
    return 0;
}

[UVA] 10042 - Smith numbers

/*20140325 hanting*/
#include <iostream>
#include <cmath>
using namespace std;
int m=0;
int Prime[10000];
int num_total(int num)
{
    int total=0;
    while(num)
    {
        total+=num%10;
        num/=10;
    }
    return total;
}
bool prime(int num)
{
    for(int i=0;i<m && Prime[i]<=ceil(sqrt(num));i++)
    {
        if(num%Prime[i]==0 && num!=2)
        {
            return 0;
            break;
        }
        if(Prime[i+1]>ceil(sqrt(num)))
        {
            return 1;
            break;
        }
    }
}
int SmithNumber_total(int num)
{
    int total=0;
    for(int i=0;i<m && i<=num;i++)
    {
        while(num%Prime[i]==0)
        {
            total+=num_total(Prime[i]);
            num/=Prime[i];
        }
        if(prime(num)==1)
        {
            total+=num_total(num);
            break;
        }
    }
    return total;
}
int main()
{
    int Num[50000]={0};
    for(int i=2;i<50000;i++)
    {
        if(Num[i]==0)
        {
            Prime[m++]=i;
        }
        for(int j=i;j<50000;j+=i)
        {
            Num[j]=1;
        }
    }
    int N;
    cin>>N;
    while(N--)
    {
        int num;
        cin>>num;
        while(++num)
        {
            if(prime(num)!=1)
            {
                if(SmithNumber_total(num)==num_total(num))
                {
                    cout<<num<<endl;
                    break;
                }
            }
        }
    }
    return 0;
}

2014年3月21日 星期五

[UVA] 490 - Rotating Sentences

/*20140321 hanting*/
#include <iostream>
using namespace std;
int main()
{
    string s[1000];
    int i;
    int max=0;
    for(i=0;i>=0;i++)
    {
        getline(cin,s[i]);
        if(s[i].size()>max) max=s[i].size();
        if(s[i]=="") break;
    }
    for(int j=0;j<max;j++)
    {
        for(int k=i-1;k>=0;k--)
        {
            j<s[k].size() ? cout<<s[k][j] : cout<<" ";
        }
        cout<<endl;
    }
    return 0;
}

2014年3月14日 星期五

[UVA] 762 - We Ship Cheap

/*20140314 hanting*/
#include <iostream>
using namespace std;
string st[1009][1009];
int main()
{
    int space=0;
    int N;
    while(cin>>N)
    {
        if(space!=0) cout<<endl;
        space=1;
        string s[N+5][2];
        string cpys[N+5][2];
        for(int i=0;i<=N;i++)
        {
            cin>>s[i][0]>>s[i][1];
            cpys[i][0]=s[i][0];
            cpys[i][1]=s[i][1];
        }
        st[0][0]=s[N][1];
        int m=0,n=1;
        int temp,check=1;
        for(int i=0;i>=0 && check==1;i++)
        {
            check=0;
            for(int j=0;j<n ;j++)
            {
                for(int k=0;k<N;k++)
                {
                    if(s[k][0]==st[i][j])
                    {
                        st[i+1][m++]=s[k][1];
                        s[k][1]="x";
                        check=1;
                    }
                    else if(s[k][1]==st[i][j])
                    {
                        st[i+1][m++]=s[k][0];
                        s[k][0]="x";
                        check=1;
                    }
                    if(st[i+1][m-1]==s[N][0])
                    {
                        j=n;temp=i;i=-2;
                        break;
                    }
                }

            }
            n=m;m=0;
        }

        if(check==0)
        {
            cout<<"No route"<<endl;
            continue;
        }
        string store=cpys[N][0];
        for(int i=temp;i>=0;i--)
        {
            for(int j=0;j>=0;j++)
            {
                for(int k=0;k<N;k++)
                {
                    if(st[i][j]==cpys[k][0] && cpys[k][1]==store)
                    {
                        cout<<cpys[k][1]<<" "<<cpys[k][0]<<endl;
                        store=cpys[k][0];
                        j=-2;break;
                    }
                    else if(st[i][j]==cpys[k][1] && cpys[k][0]==store)
                    {
                        cout<<cpys[k][0]<<" "<<cpys[k][1]<<endl;
                        store=cpys[k][1];
                        j=-2;break;
                    }
                }
            }
        }
    }
    return 0;
}

2014年3月7日 星期五

[UVA] 11541 - Decoding

/*20140307 hanting*/
#include<iostream>
using namespace std;
int main()
{
    int N;
    cin>>N;
    char endl;
    cin.get(endl);
    for(int time=1;time<=N;time++)
    {
        char c[1000];
        int a[1000];
        int i;
        for(i=0;;i++)
        {
            cin.get(c[i]);
            if(c[i]=='\n') break;
            cin>>a[i];
        }
        cout<<"Case "<<time<<": ";
        for(int j=0;j<i;j++)
        {
            for(int k=0;k<a[j];k++)
            {
                cout<<c[j];
            }
        }
        cout<<endl;
    }
    return 0;
}

2014年3月6日 星期四

[UVA] 673 - Parentheses Balance

/*20140307 hanting*/
#include <iostream>
using namespace std;
int main()
{
    int N;
    cin>>N;
    cin.get();
    while(N--)
    {
        string s;
        getline(cin,s);
        int x=1;
        while(x)
        {
            x=0;
            if(s.find("()")<s.size())
            {
                s.erase(s.find("()"),2);
                x=1;
            }
            if(s.find("[]")<s.size())
            {
                s.erase(s.find("[]"),2);
                x=1;
            }

        }
        if(s!="") cout<<"No"<<endl;
        else cout<<"Yes"<<endl;
    }
    return 0;
}

2014年3月1日 星期六

[UVA] 263 - Number Chains

/*20140301 hanting*/
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
int sortd(int a)
{
    vector<int> sorta(0);
    int d;//d位數
    for(d=0;d<10;d++)//將a的每一位數字分開存入sorta陣列
    {
        if(a==0) break;
        sorta.push_back(a%10);
        a/=10;
    }
    sort(sorta.begin(),sorta.end());
    reverse(sorta.begin(),sorta.end());
    for(int i=0;i<d;i++)
    {
        a+=(sorta[i]*pow(10.,d-i-1));
    }
    return a;
}
int R(int a)
{
    int Ra=0;
    while(a)
    {
        Ra*=10;
        Ra+=a%10;
        a/=10;
    }
    return Ra;
}
int main()
{
    int digit;
    while(cin>>digit && digit!=0)
    {
        cout<<"Original number was "<<digit<<endl;
        int count=0;
        int temp[100]={0};
        int i=0;
        int n=1;
        while(n)
        {
            temp[i]=digit;
            count++;
            cout<<sortd(digit)<<" - "<<R(sortd(digit))<<" = "<<sortd(digit)-R(sortd(digit))<<endl;
            digit=sortd(digit)-R(sortd(digit));
            i++;
            for(int j=i-1;j>=0;j--)
            {
                if(digit==temp[j])
                {
                    n=0;break;
                }
            }
        }
        cout<<"Chain length "<<count<<endl<<endl;
    }
    return 0;
}

/*另一寫法*/
/*20140721 hanting*/
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
void Itoa(int N,char *s,int ary)
{
    int i=0;
    for(i=0;i<25;i++)
    {
        s[i]=(N%ary)+48;
        N/=ary;
        if(N==0) break;
    }
    reverse(s,s+i+1);
    s[i+1]=0;
}
int main()
{
    int a;
    while(cin>>a ,a)
    {
        cout<<"Original number was "<<a<<endl;
        char s[15];
        int chain=0;
        int store[1000];
        int True=1;
        while(True)
        {
            store[chain]=a;
            chain++;
            Itoa(a,s,10);
            sort(s,s+strlen(s));
            a=atoi(s);
            reverse(s,s+strlen(s));
            int tema=atoi(s);
            cout<<s<<" - "<<a<<" = "<<tema-a<<endl;
            a=tema-a;
            for(int i=0;i<chain;i++)
            {
                if(a==store[i])
                {
                    True=0;break;
                }
            }
        }
        cout<<"Chain length "<<chain<<endl<<endl;
    }
    return 0;
}