2018年4月14日 星期六

程式設計--UVA10252

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char a[1001],b[1001];
    int i,j;
    while(gets(a))
    {
        int sta_a[123]={0},sta_b[123]={0}; //每次比較後都要清空陣列

        for(i=0;i<strlen(a);i++)
        sta_a[(int)a[i]]++;

        gets(b);  //有的好像不支援gats寫法 C11不支援?
        for(i=0;i<strlen(b);i++)         //a陣列與b陣列各自計算到各自的數字陣列
        sta_b[(int)b[i]]++;

        for(i='a' ; i<'z' ; i++)  //這裡原本是數字,但因為我有時會忘記ASCII表,想說用字母來打好像比較明瞭一點
        {
            j=0;                      //再來比較兩個陣列之間的數字
            while(j<sta_a[i] && j<sta_b[i])  /
/判斷的方式是看兩個陣列共通的那個字母,並取決於較少的那個陣列,這樣就算有一個字串同時有兩的字母也不會算錯
            {
                printf("%c",i);
                j++;
            }
        } printf("\n");
    }
    return 0;
}

題目網址:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=&problem=1193&mosmsg=Submission+received+with+ID+21136828

我覺得重要的概念:
*gets(a)用來抓字串,感覺很方便,但好像C11不支援
*scanf碰到空格之類的都會停止,再輸入字串,get比較好用
*我本來的寫法是用一個數字陣列去統計兩個字元陣列,但我發現會有一個字串同於兩個字母的問題,看了書上的解法,還是分開計算在比較,會容易一點

參考:
https://openhome.cc/Gossip/CGossip/PutcharGetcharPutsGets.html

http://leoenglish.blog.163.com/blog/static/1750319852011296336486/
http://style77125tech.pixnet.net/blog/post/174460605-%5B-c-%5D-gets%28%29-scanf%28%29-%E7%A9%BA%E7%99%BD%E6%8E%A7%E5%88%B6


沒有留言:

張貼留言