首页 > 试题广场 >

下厨房

[编程题]下厨房
  • 热度指数:54317 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。

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


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

输入

BUTTER FLOUR
HONEY FLOUR EGG

输出

4

本题有一个难点,就是输入的行数不确定,也就是键盘输入几行就是几行,因此我们需要使用Scanner.class.hasNext()方法进行判断,该方法返回boolean类型的值,当键盘手动输入结束时才会返回false,window环境下使用ctrl+z结束输入循环,linux环境下使用ctrl+d结束输入循环。

另外,本题需要对输入的字符串根据空格分隔符来分割成一个数组并且去重,因此可以使用集合来去除重复元素,这里我使用的是HashSet集合
import java.util.HashSet;
import java.util.Scanner;

public class Main {
	
	//下厨房
	public static void main(String[] args) {
		
		Scanner in = new Scanner(System.in);
		HashSet<String> set = new HashSet<String>();
		
		while(in.hasNext()){
			String str = in.nextLine();
			String arr[] = str.split(" ");
			for(int i=0; i<arr.length; i++){
				set.add(arr[i]);
			}
		}
		
		System.out.println(set.size());
		set.clear();
	}
}
发表于 2017-08-31 12:37:22 回复(11)
//用vector写的
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main(){
    string food;
    vector<string> iVec;
    int count = 0;
    while(cin>>food){
        auto it = find(iVec.begin(),iVec.end(),food);
        if (it == iVec.end())
            iVec.push_back(food);
    }
    cout<<iVec.size()<<endl;
    return 0;
}

发表于 2017-08-11 16:57:06 回复(11)
#include<iostream>
#include<set>
using namespace std;
int main()
{
    string str;
    set<string> mat;
    int res=0;
    while(cin>>str)
    {
        if(mat.find(str)==mat.end())
        {
            res++;
            mat.insert(str);
        }
            
        else
            continue;
    }
    cout<<res<<endl;
    return 0;
    
}

发表于 2016-08-09 16:45:54 回复(10)
A = set()
while 1:
    try:
        for k in raw_input().split():
            A.add(k)
    except:
        break
print len(A)


发表于 2017-09-02 17:20:33 回复(1)
import java.util.Scanner;
import java.util.HashSet;
import java.util.Set;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        Set<String> hs = new HashSet<>();
        while(sc.hasNext()){
            String[] strs = sc.nextLine().split(" ");
            for(int i=0;i<strs.length;i++){
                hs.add(strs[i]);
            }
        }
        System.out.println(hs.size());
    }
}

发表于 2018-10-12 11:06:06 回复(0)
没什么难度,把所有原材料添加到集合里去就可以了,集合会帮我们去重,最终集合的大小就是材料的种数
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        HashSet<String> set = new HashSet<>();
        String line;
        while((line = br.readLine()) != null){
            String[] items = line.split(" ");
            for(String item: items){
                set.add(item);
            }
        }
        System.out.println(set.size());
    }
}

发表于 2022-03-22 15:57:29 回复(0)
本题用python很快就搞定了
代码如下:
l = []
while True:
    try:
        l=l+(input().split())
    except:
        break
l_set = set(l)
print(len(l_set))


发表于 2021-04-17 21:56:34 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main()
{
    unordered_set<string> S;
    string line;
    while(cin>>line)
    {
        S.insert(line);
    }
    cout<<S.size()<<endl;
    return 0;
}

发表于 2020-08-20 21:46:58 回复(0)
#include<bits/stdc++.h>
using namespace std;
map<string,int>a; string s; int main() {     int sum=0;     while(cin>>s)       if(a[s]!=1)         {           a[s]++;           sum++;         }     printf("%d",sum);     return 0; }
用map存 

发表于 2018-08-02 14:10:08 回复(1)
  • 额,如果知道set的性质,很水的。如果自己造轮子,可能稍微费点劲。
#include <iostream>
#include <set>

using namespace std;

int main(){
    set<string> gradients;
    string grad;
    while(cin>>grad){
        gradients.insert(grad);
    }
    cout<<gradients.size();

    return 0;
}

嘿嘿嘿,刷新解题速度的题~

发表于 2018-07-21 10:03:31 回复(0)
用python的try expect方法捕获异常,代码如下:
material = []
list = []
while True:
    try:
        list = input().split()
        material += list
    except:
        break
print(len(set(material)))

发表于 2018-06-14 13:12:51 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner input=new Scanner(System.in);
        HashSet<String> hs=new HashSet<>();
        while(input.hasNext()){
            String s=input.nextLine();
            String[] str=s.split(" ");
            for(int i=0; i<str.length; i++)
                hs.add(str[i]);
        }
        System.out.println(hs.size());
    }
}

发表于 2018-05-21 19:08:01 回复(0)
/***
 * 每次接受到的String都放入Set中,因为String重写了equals方法,所以在Set中相同值的String会被覆盖
 */
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main{

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        Set<String> set = new HashSet<>();
        while(s.hasNext()){
            String str = new String(s.next());
            set.add(str);
        }
        System.out.println(set.size());
    }
}

发表于 2018-05-19 13:08:27 回复(0)
import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;
public class Main{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<String> list = new ArrayList<>();
        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
            String[] s = line.split(" ");
            map(s, list);
        }
        System.out.println(list.size());
    }

    public static void map(String[] s, List list) {
        for (String str : s) {
            if (list.contains(str)) {
                continue;
            }
            list.add(str);
        }
    }
}
编辑于 2018-05-19 10:44:06 回复(0)

编辑于 2018-04-12 15:17:36 回复(0)
import java.util.HashSet;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        HashSet<String> material = new HashSet<>();
        
        while(sc.hasNext()) {
            String str = sc.next();
            material.add(str);
        }
        
        System.out.println(material.size());
    }
}
发表于 2018-03-14 22:23:10 回复(0)
#include <bits/stdc++.h>

using namespace std;

int main()
{     string s;     set<string> map;     int count = 0;     while(cin>>s)      {         if(map.find(s) == map.end())         {             map.insert(s);             count++;         }else             continue;      }     cout<<count<<endl;     return 0;
}

发表于 2018-01-01 01:12:19 回复(0)
#include<string>
#include<iostream>
#include<set>
#include<sstream>
using namespace std;
int main(){
    string x,y;
    set<string> s;
    while(getline(cin,x)){
        stringstream ss(x);
        while(ss>>y) s.insert(y);
    }
    cout<<s.size()<<endl;
}

发表于 2017-10-20 23:52:29 回复(0)

int main()
{
map a ;
string s ;
while(cin>>s)
{
a[s] ;
}
cout<<a.size ()<<endl ;
}

编辑于 2017-09-30 15:46:44 回复(0)
import java.util.*;
public class Main{ 
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        Set<String> set = new HashSet<String>(); 
        while(sc.hasNext()){
            String input = sc.next();
            set.add(input);      
        }
        System.out.println(set.size());
    }
}

发表于 2017-09-23 18:28:33 回复(0)

问题信息

难度:
257条回答 31927浏览

热门推荐

通过挑战的用户

查看代码