首页 > 试题广场 >

小红背单词

[编程题]小红背单词
  • 热度指数:2790 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小红每天都要背单词,然后她会把每天记住了多少单词记录下来,并在小红书上打卡。

当小红背单词时,如果她已经记住了i个单词,且背了一个没有记住的新单词i+1次,则她就会记住这个新的单词。
例如,当她按顺序背["you","thank","thank"]时,她第一次背单词"you"时她就能记住"you"。而由于她已经记住了一个单词,所以需要背两次"thank"才能记住"thank"。

现在你知道了小红背单词的顺序,请你求出小红今天记住了多少个单词。

输入描述:
第一行一个整数n(1 \leq n \leq 10000)
接下来n行,每行一个字符串,保证每个字符串长度不超过 10。


输出描述:
输出一个整数,表示她记住了多少个单词。

示例1

输入

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;
}

发表于 2025-10-07 14:51:30 回复(0)