每日一題,是否存在(c語言)

每日一題:1.是否存在

是否存在
描述
貓咪非常喜歡餅乾,尤其是字母餅乾。現在,她得到一些字母餅乾,她希望選擇他們中的一些拼寫某些單詞。

你的任務是確定她是否可以拼出自己想要的單詞。

 

輸入
輸入包含若干測試用例,對於每組測試用例:

第一行輸入一個字元串S1(1 <= 長度 <= 100),代表她擁有的字母餅乾。
第二行輸入一個字元串S2(1 <= 長度 <= 100),代表她想要拼出的單詞。

輸出
對於每個測試用例,如果她可以拼出單詞,請輸出「Yes」,否則輸出「No」。
#include<stdio.h>
int main()
{int a,b,c;
while(~scanf(“%d%d%d”,&a,&b,&c))//去地址符號沒寫
{if(a>b)
{if(a>c)
printf(“1\n”);
else
printf(“3\n”);
}
else
{if(b>c)
printf(“2\n”);
else
printf(“3\n”);
}
}
}

輸入樣例 1
ARDHPYP
HAPPY
ARDHPY
HAPPY
輸出樣例 1
Yes
No

分析:首先我們思考要拼出想要的單詞,那字元串s2的每個字元都要在字元串s1中找到,所以從字元串S2的第一個字元以後都要和字元串s1依次比較( 字元串s2為外循環,字元串s2為內循環),直到和字元串s1的其中一個字元相等,就結束本次的循環(內循環),再重新進入外循環。我們需要引入一個變數
為了計算相等的次數,為了方便後面Yes和No的輸出。還有一個要考慮的點,字元串s2和字元串s1里有相同的字元時,看樣例1,怎麼讓HAPPY的第二個P在遍歷字元串ARDHPYP遇到第一個P,設置計數的變數不計數呢或者說讓他們不相等呢。那麼我們可以把字元串ARDHPYP第一個P,在完成計數後,給他賦值,這裡我是把字元#
賦給他。最後比較變數是否和s2的長度相等。如果相等,輸出「Yes」,否則輸出「No」。

 

用到的知識點:for循環的嵌套,break語句的運用,字元串數組,字元串對函數的引用,if語句。

程式碼如下:
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,m,n,a;
char s1[100],s2[100];
while(~scanf(“%s%s”,s1,s2))
{
m=strlen(s2);
n=strlen(s1);
a=0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(s2[i]==s1[j])
{
a++;
s1[j]=’#’;
break;
}
}
}
if(a==m)
{
printf(“Yes\n”);
}
else
printf(“No\n”);
}
}

做題時犯的錯誤:沒加break語句,就導致當有相同字元時會多計數,導致答案錯誤。

不足:沒有完全分析理解清楚題目
新手小白,有錯希望指出。

座右銘:路要朝前走,人往未來看

Tags: