太空键盘-gets/fgets输入

太空键盘-gets/fgets输入


一、目的

-掌握gets与fgets的区别
-掌握long long用法
-掌握用数组来存值

二、实验内容与设计思想

太空键盘-gets/fgets输入

为了适应特殊的太空环境,提升宇航员在在太空操作的准确性,宇航员在太空中使用的数字键盘和我们使用的键盘是不一样的。

太空键盘严格的分为左右两个部分:左手负责输入数字 1,2,3,4,5,右手负责输入数字 6,7,8,9,0,宇航员在进入太空之前对于在太空中的键盘输入都会进行严格的训练。

在输入每个数字时,需要花费不同的时间,经过长期的追踪统计,得到数据如下。

对于每次要输入的一串数字。

输入数字的第一个字符,无论是什么数字,都需要 500 毫秒。

如果当前输入的数字与上一个输入的数字相同,则需要 301 毫秒。

如果当前输入的数字与上一个输入的数字不同,但使用相同的手输入,则需要 210 毫秒。

其他情况下,需要 100 毫秒。

请你编程计算出,如果现在要输入一个很长的数字串 N,根据统计数据,需要多少毫秒。

输入格式:
输入一个数字串 N。

输出格式:
输出一个整数,表示输入数字串 N 所需的总毫秒数。

输入样例:
16673
输出样例:
1211
输入样例:
10
输出样例:
600
输入样例:
126778889112230009967888
输出样例:
5910
样例解释
输入 16673 时:

输入第一个数字 1,耗时 500 毫秒。

输入第二个数字 6,与前一个数字不同,且使用了不同的手输入,耗时 100 毫秒。

输入第三个数字 6,与前一个数字相同,耗时 301 毫秒。

输入第四个数字 7,与前一个数字不同,使用相同的手输入,耗时 210 毫秒。

输入第五个数字 3,与前一个数字不同,且使用了不同的手输入,耗时 100 毫秒。

总时间为 100+100+301+210+100=1211 毫秒。

数据范围
对于 100% 的数据,满足输入的数字串 N 的长度在 [1,10
6
] 的范围内,且数字串 N 的第 1 位不是数字 0。
函数相关伪代码

1.数组a[1000000]
2.字符串输入
3.获得字符长度
4.循环数组并判断是否相加

函数代码

#include<stdio.h>
#include<string.h>
int main()
{
   char a[1000000];
   long i,l;
   long long sum;
   gets(a);
   l=strlen(a);
   sum=500;
   for(i=1;a[i]!='\0';i++){
   if(a[i]==a[i-1]){
   sum+=301;
   }else if(a[i]>'0'&&a[i]<'6'&&a[i-1]>'0'&&a[i-1]<'6'){
     sum+=210;
   }else if(a[i]!='5'&&a[i]!='1'&&a[i]!='2'&&a[i]!='3'&&a[i]!='4'&&a[i-1]!='5'&&a[i-1]!='1'&&a[i-1]!='2'&&a[i-1]!='3'&&a[i-1]!='4'){
   sum+=210;
   }
   else{
   sum+=100;
   }
   }
   printf("%lld",sum);
   return 0;
}
/*
fgets(a, sizeof(a), stdin);
a[strcspn(a, "\n")] = '\0';
*/

时间复杂度O(n),空间复杂度O(1)

三、实验使用环境

以下请根据实际情况编写

  • 操作系统:Windows 11专业版
  • 编程语言:C
  • 开发工具:[DevC++]

四、实验步骤和调试过程

太空键盘

本机运行截图


五、实验小结

遇到的问题及解决方法:

  1. 问题:输入字符未正确处理
  • 解决方法:优化代码,修改输入方法

实验体会和收获:

这段代码的目的是计算一个人在太空输入键盘所需时间。由于输入的数值可以非常大,所以不可以直接当成一个int来输入,这会导致数据溢出,出现问题,需要把它当成一个字符串,并将其存储在数组中。读取字符串可以用gets和fgets,可以直接使用gets来读入,但不可以直接使用fgets来读入,这是因为fgets会保留换行符“\n"并末尾补"\0",但gets不会读取"\n",而是直接补"\0",所以想使用fgets后要用strcspn来替换"\0",否则下面循环会有问题,并且fgets安全级别高于gets。然后,由于一定会有输入,所以它计算字符串的长度并初始化 sum 为 500。接下来,它遍历字符串的每个字符,并根据当前字符和前一个字符的值来增加 sum 的值。

posted @ 2025-04-15 14:41  穗和  阅读(18)  评论(0)    收藏  举报