用输入,输出文件的形式解决C经典习题---韩信点兵

目录

一.问题描述

二.答题规范

三.解题思路

四.代码展示_1

五.以文件形式输入输出

六.代码展示_2

七.总结


一.问题描述

        相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入包含多组数据,每组数据包含3个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100。输入到文件结束为止

二.答题规范

样例输入:

2 1 6

2 1 3

样例输出:

Case 1: 41

Case 2: No answer

三.解题思路

         这道题什么意思呢,就是该军队的人数在10~100范围内。要是以3人一排,那么余数就是a,以5人一排,余数就是b,以7人一排,余数就是c。设有x人,那么x满足等式 x % 3 == a, x % 5 == b, x % 7 == c。在这三个等式全都满足时,就得到了x的值。 

        那么用代码大概怎么实现呢,可以给x从10到100循环,每次判断(用if)是否满足这三个等式。若满足,直接跳出循环。若循环完仍不满足,那么就报告无解。

四.代码展示_1

#include <stdio.h>

int main () 
{	
	int a,b,c; 
	int i, Kase = 0; // 计数 
	while(scanf("%d %d %d", &a,&b,&c) != EOF)  // 输入多组数据的标志
	{
		int temp = 0; // 读入每组数前初始化 
		for (i = 10; i <= 100; i++)
		{
			if (i % 3 == a && i % 5 == b && i % 7 == c)
			{
				printf("Case %d: %d\n\n", ++Kase, i);
				temp = 1;  // 作为找到满足条件数据的标志量 
				break;
			} 
		}
		if (!temp) printf("Case %d:No answer\n\n", ++Kase); // !temp 和 temp == 0 等价 
	}
	return 0;
}

输出:

                ​​​​​​​

但是不满足题意,没有实现输入,输出的分离。因此引出以下内容:

五.以文件形式输入输出

        注意本题的要求,输入包含多组数据,每组数据都要有结果。我们自己输入,题目给的两组还行,要是有十几组呢?

       其实并不需要我们手动输入。输入输出的数据如果很多,可以以文本的形式储存的,用的时候调过来就行。这样既节省了时间,也增强了程序的可读性。

六.代码展示_2

        建立两个.txt文件。

        input.txt用来存输入的数据(数据已填入):

                       

         output.txt用来存输出的数据(运行后数据会显示在这里):

                        

         以下是代码展示 :

#include <stdio.h>

int main () 
{
	FILE *fin, *fout;
	fin = fopen("input.txt", "rb");
	fout = fopen("output.txt", "wb"); // 文件引入 
	
	int a,b,c; 
	int i, Kase = 0;
	while(fscanf(fin,"%d%d%d", &a,&b,&c) != EOF)  // 以文件结束标志输入结束 
	{
		int temp = 0; // 读入每组数前初始化 
		for (i = 10; i <= 100; i++)
		{
			if (i % 3 == a && i % 5 == b && i % 7 == c)
			{
				fprintf(fout,"Case %d: %d\n\n", ++Kase, i); // ++Kase 先给Kase+1,再代入 
				temp = 1;  // 作为找到满足条件数据的标志量 
				break;
			} 
		}
		if (!temp) fprintf(fout, "Case %d:No answer\n\n", ++Kase); // !temp 和 temp == 0 等价 
	}
	return 0;
}

              运行后命令框不会显示任何内容,因为数据已经储存到了output.txt中。

        

        ​​​​​​​        ​​​​​​​        ​​   

 

七.总结

       以文件输入输出的形式,如果大家暂时不理解也没关系,这里可以作为拓展。比如说,在刷算法题时,出现的许多检验的数字就是存储在文件中。这样的好处就是在写程序时专注于解题的思路而不是在输入输出上浪费时间。有机会我会出一篇关于文件的文章,到时候大家再回头看这篇文章就不难理解啦。

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值