小红每天都要背单词,然后她会把每天记住了多少单词记录下来,并在小红书上打卡。
当小红背单词时,如果她已经记住了
个单词,且背了一个没有记住的新单词
次,则她就会记住这个新的单词。
例如,当她按顺序背["you","thank","thank"]时,她第一次背单词"you"时她就能记住"you"。而由于她已经记住了一个单词,所以需要背两次"thank"才能记住"thank"。
第一行一个整数。
接下来行,每行一个字符串,保证每个字符串长度不超过 10。
输出一个整数,表示她记住了多少个单词。
5 you thank queue queue thank
2
小红先记住了单词"you",又因为背了两次"queue",于是记住了单词"queue"。由于已经记住了两个单词,所以背两次"thank"还不能让小红记住。
//程序已通过所有用例
#include <stdio.h>
#include <string.h>
//思路:每来一个单词记录一次这个单词记了多少次,然后对比当前记到第i个单词需要的次数,满足则标记这个单词记住了,后面再来相同的单词就可以跳过。
typedef struct{
int remember_count; //被背的次数
int is_remember; //这个单词是否记住了
char string[11]; //单词
} node;
int main() {
//思路:好像不需要排序啊,只需要根据每次来一个单词,然后对比这个单词满不满足记第i个单词所需要的数量,就可以标记为记住,下次遇到相同的就跳过就行了。
int n;
scanf("%d",&n);
node array[n];
memset(array, 0, sizeof(array));
int need=1; //满足记第i个单词需要的次数
for(int i=0;i<n;i++)
{
char temp_string[11];
scanf("%s",temp_string);
for(int j=0;j<n;j++)//对比存入
{
if(array[j].remember_count==0) //没有出现过这个单词
{
strcpy(array[j].string,temp_string);
array[j].remember_count=1;
//printf("%s=%d ",array[j].string,array[j].remember_count);
if(array[j].remember_count==need)
{
array[j].is_remember=1;
need++; //下一个单词需要的次数
}
break;
}else if(strcmp(array[j].string, temp_string)==0){
if(array[j].is_remember==0) //没有记住才需要加
{
array[j].remember_count+=1;
if(array[j].remember_count==need)
{
array[j].is_remember=1;
need++; //下一个单词需要的次数
}
//printf("%s=%d ",array[j].string,array[j].remember_count);
break;
}
break;//找到相等的也要break;不然就会就会新建空间了吧
}
}
//printf("%s",array[i].string);
}
printf("%d",need-1); //输出记了多少个单词了
return 0;
}