列表

详情


WY8. 下厨房

描述

牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。

输入描述

每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。

输出描述

输出一行一个数字表示完成所有料理需要多少种不同的材料。

示例1

输入:

BUTTER FLOUR
HONEY FLOUR EGG

输出:

4

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 312KB, 提交时间: 2021-07-30

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef char ch[51];
typedef struct node
{
    struct node* next;
    ch raw;
}Node,*NodePtr;


int find_list(NodePtr L,ch str)
{   
    NodePtr p=L->next;
    int flag;
    while(p)
    {
        if(!strcmp(p->raw,str))
        {
            return 1;
        }
       p=p->next;
       
    }
    return 0;
}
int main()
{   
    int i=0;
    int j=0;
    int count=0;
    char str[51];
    ch temp;
    NodePtr head,tail;
    head=(NodePtr)malloc(sizeof(Node));
    head->next=NULL;
    tail=head;
    while(fgets(str,51,stdin))
    //while(scanf("%[^\n]",str))
    {    
        int len=strlen(str);
        for(i=0;i<len;i++)
        {
            if(str[i]!=' '&&str[i]!='\n')
            {
                temp[j]=str[i];
                j++;
            }
            else
            {
                temp[j]='\0';
              if(!find_list(head,temp))
                {
                   NodePtr p=(NodePtr)malloc(sizeof(Node));
                   strcpy(p->raw,temp);
                   tail->next=p;
                   tail=p;
                  count++;
                  
                }
                memset(temp,'\0',51);
                j=0;
            }
        }
        /*int c;
        while((c=getchar())!='\n'&&c!=EOF);*/
        //getchar();
    }
    printf("%d",count);
    return 0;
}   

C 解法, 执行用时: 2ms, 内存消耗: 352KB, 提交时间: 2018-08-29

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char material[2500][51] = {0};
int main()
{
    int i,count = 1;
    scanf("%s",material[0]);
    for(i = 1; i < 2500; i++)
    {
        if(scanf("%s",material[i]) == EOF)
            break;
        else
        {
            count = count + 1;
            for(int j = 0; j < i; j++)
            {
                if(!strcmp(material[i],material[j])) {
                    count = count - 1;
                    break;
                }
            }
        }
 
    }
    printf("%d",count);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 360KB, 提交时间: 2020-10-16

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char material[2500][51] = {0};
int main()
{
    int i,count = 1;
    scanf("%s",material[0]);
    for(i = 1; i < 2500; i++)
    {
        if(scanf("%s",material[i]) == EOF)
            break;
        else
        {
            count = count + 1;
            for(int j = 0; j < i; j++)
            {
                if(!strcmp(material[i],material[j])) {
                    count = count - 1;
                    break;
                }
            }
        }
 
    }
    printf("%d",count);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 364KB, 提交时间: 2018-08-30

#include <stdio.h>
#include <string.h>
  
int main(void)
{
    char Save[1000][100];
    char Input[100];
    int SaveCounter = 0;
    int i = 0;
    while((scanf("%s", &Input)!=EOF))
    {
        i = 0;
        while(i<=SaveCounter&&strcmp(Input, Save[i])!=0)
            i++;
        if(i>SaveCounter)
        {
            strcpy(Save[SaveCounter], Input);
            SaveCounter++;
        }
    }
    printf("%d", SaveCounter);
}

C 解法, 执行用时: 2ms, 内存消耗: 368KB, 提交时间: 2021-02-26

#include<stdio.h>
int main()
{
    char  key[1000];
    char no[1000][100];
    int count=0;
    while(scanf("%s",&key)!=EOF)
    {
        int temp=0;
        for(int i=0;i<count;i++)
        {
            if(strcmp(no[i],key)==0)
            {
                temp=1;
                break;
            }
        }
        if(temp==0)
        {
            strcpy(no[count],key);
            count+=1;
            
        }
    }
    printf ("%d",count);
}

上一题