1331: [蓝桥杯2017初赛]兴趣小组 【中】有点意思

在这里插入图片描述

http://oj.ecustacm.cn/problem.php?id=1331

题解:
主要考察对文件的读取操作。
文件的读写操作详解
我们先将这三个文件 1.txt 2.txt 3.txt 弄好弄到桌面上。
这样方便fopen在读取的时候不需要写路径了。
记得将文件内的逗号换成空格这样方便读取。
在这里插入图片描述
用map来映射操作十分的方便

#include<cstdio>
#include<map>
#include<iostream>
using namespace std;
int main(void)
{
    
    
	FILE *f1;
	f1=fopen("1.txt","r");
	FILE *f2;
	f2=fopen("2.txt","r");
	FILE *f3;
	f3=fopen("3.txt","r");
	if(!f1&&!f2&&f3)
	{
    
    
		printf("没有打开"); 
	}
	char number[50];
	map<string,int>mp;
	while(fscanf(f1,"%s",&number)!=EOF)
	{
    
    
		mp[number]=1;
	}
	while(fscanf(f2,"%s",&number)!=EOF)
	{
    
    
		mp[number]++;
	}
	while(fscanf(f3,"%s",&number)!=EOF)
	{
    
    
		if(mp[number]!=0)
		//把在3中出现的,且在1或2也出现的重置为0 表示为1,2中未在3出现的 
		{
    
    
			mp[number]=0;
		}
	}
	int sum=0;
	map<string,int>::iterator it;
	for(it=mp.begin();it!=mp.end();it++)
	{
    
    
		if(it->second==2)
			sum++; 
	} 
	printf("%d\n",sum);
	return 0;
}

或者用数组,不过前提是 把前面多余的零替换成空格

#include<stdio.h>
int main()
{
    
    
	FILE *fp,*fp1,*fp2;
	long long arry[400];
	long long arry1[400];
	long long arry2[400];
	long long arry3[400];
	long long number;
	int len1=0,len2=0,len3=0,len4=0;
	int i=0,j=0;
	int num=0,num1=0;
	fp=fopen("A.txt","r");//A文件 
	fp1=fopen("B.txt","r");//B文件 
	fp2=fopen("C.txt","r");//C文件 
    while(fscanf(fp,"%lld",&number)!=EOF)//把A文件的数存储到arry数组 
    {
    
    
    	arry[len1++]=number;	
    }
	while(fscanf(fp1,"%lld",&number)!=EOF)//把B文件的数存储到arry1数组 
    {
    
    
    	arry1[len2++]=number;	
    }
    while(fscanf(fp2,"%lld",&number)!=EOF)//把C文件的数存储到arry2数组 
    {
    
    
    	arry2[len3++]=number;	
    }
    
    for(i=0;i<len1;i++)
    {
    
    
    	for(j=0;j<len2;j++)
    	{
    
    
    		if(arry[i]==arry1[j])
    		{
    
    
    			arry3[len4++]=arry[i];//把A,B文件的相同的数存储到arry3数组 
    			num++;//A,B共有个数 
    		}
    	}
    }
    for(i=0;i<len4;i++)
    {
    
    
    	for(j=0;j<len3;j++)
    	{
    
    
    		if(arry3[i]==arry2[j])
    		{
    
    
    			num1++;
    		}
    	}
    }
    printf("%d",num-num1);//属于A,B但不属于C 
	fclose(fp);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/bettle_king/article/details/115218277