第三章 枚举与单位换算

目录

第一题    ASC

第二题 空间

第三题 约数个数

第四题 单词分析

第五题 既约分数 

第六题 时间显示

第七题 特殊时间

第八题 相乘


第一题    ASC

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

已知大写字母 A 的 ASCII 码为 65,请问大写字母 L 的 ASCII 码是多少?

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M
  • #include <iostream>
    using namespace std;
    int main()
    {
      printf("%d",'L');
      return 0;
    }
    
    

    其他:

  • #include<iostream>
    using namespace std;
    int main(){
    	printf("%d\n",'L');
    	for(int i='A';i<='Z';i++){
    		printf("%c:%d\n",i,i);
    	}
    	for (int i='a';i<='z';i++){
    		printf("%c:%d\n",i,i);
    	}
    	for (int i=91;i<=97;i++){
    		printf("%d:%c\n",i,i);
    	}
    	return 1; 
    } 

    A=65,a=97

第二题 空间

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小蓝准备用 256MB256MB 的内存空间开一个数组,数组的每个元素都是 3232 位 二进制整数,如果不考虑程序占用的空间和维护内存需要的辅助空间,请问 256MB256MB 的空间可以存储多少个 3232 位二进制整数?

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

#include <iostream>
using namespace std;
int main()
{

  int m = 256;
  m = m *1024*1024*8.0/32.0;
  cout <<m;
  return 0;
}

第三题 约数个数

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

12000001200000 有多少个约数(只计算正约数)。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

#include <iostream>
using namespace std;
int main()
{
  int cnt = 0;
  for (int i=1;i<=1200000;i++)
  {
  	if (1200000%i==0){
  		cnt++;
	  }
   } 
  cout <<cnt<<endl;
  return 0;
}

.

第四题 单词分析

题目描述

小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。

现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。

输入描述

输入一行包含一个单词,单词只由小写英文字母组成。

对于所有的评测用例,输入的单词长度不超过 1000。

输出描述

输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。

第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。

输入输出样例

示例 1

输入

lanqiao

输出

a
2

示例 2

输入

longlonglongistoolong

输出

o
6

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

  

#include <iostream>
using namespace std;
string s;
int num[27];
int main()
{
  cin >>s;
  int max = 0;
  for (int i=0;i<s.length();i++)
    num[s[i]-'a']++;
  char ans;
  for (int i =0;i<27;i++)
    {
      if (num[i]>max)
        max = num[i],ans = i+'a';
    }
    cout <<ans <<endl<<max<<endl;
  return 0;
}

全局变量,数组默认初始化为0,

第五题 既约分数 

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

如果一个分数的分子和分母的最大公约数是 11,这个分数称为既约分数。

例如 \frac{3}{4} ,\frac{1}{8} ,\frac{7}{1}43​,81​,17​, 都是既约分数。

请问,有多少个既约分数,分子和分母都是 11 到 20202020 之间的整数(包括 11 和 20202020)?

运行限制

  • 最大运行时间:2s
  • 最大运行内存: 128M

#include <iostream>
using namespace std;
string s;
int num[27];
int gcd(int i,int j){
	if (j==0) return i;
	else 
		return gcd(j,i%j);
}
int main()
{
	int ans = 0;
	for (int i=1;i<=2020;i++)
		for(int j=1;j<=2020;j++)
			if(gcd(i,j)==1) ans ++;
	cout <<ans<<endl;
  return 0;
}

或者__gcd(i,j)==1,c语言自带的函数。

欧几里得gcd,辗转相除法

 

第六题 时间显示

输出描述

输出时分秒表示的当前时间,格式形如 HH:MM:SS,其中 HH 表示时,值为 00​​​​ 到 2323​​​​,MM 表示分,值为 00​​​​ 到 5959​​​,SS 表示秒,值为 00​​ 到 5959​。时、分、秒 不足两位时补前导 00。

输入输出样例

示例 1

输入

46800999

输出

13:00:00

示例 2

输入

1618708103123

输出

01:08:23

评测用例规模与约定

对于所有评测用例,给定的时间为不超过 10^{18}1018 的正整数。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 512M
#include <iostream>
using namespace std;
typedef long long LL;
int main(){
	LL n;
	cin >>n;
	n /= 1000;
	n %= 60*60*24;
	printf("%02d:",n/60/60);
	n%=60*60;
	printf("%02d:",n/60);
	n%=60;
	printf("%02d\n",n ) ; 
	return 0;
} 

%02d,占用两个位置,不足则用0补充。

第七题 特殊时间

问题描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

2022 年 2 月 22 日 22: 2022:20 是一个很有意义的时间, 年份为 2022 , 由 3 个 2 和 1 个 0 组成, 如果将月和日写成 4 位, 为 0222 , 也是由 3 个 2 和 1 个 0 组 成, 如果将时间中的时和分写成 4 位, 还是由 3 个 2 和 1 个 0 组成。

小蓝对这样的时间很感兴趣, 他还找到了其它类似的例子, 比如 111 年 10 月 11 日 01: 11,220201:11,2202 年 2 月 22 日 22: 0222:02 等等。

请问, 总共有多少个时间是这种年份写成 4 位、月日写成 4 位、时间写成 4 位后由 3 个一种数字和 1 个另一种数字组成。注意 1111 年 11 月 11 日 11: 1111:11 不算,因为它里面没有两种数字。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 512Mz`         
#include <iostream>
using namespace std;
int main()
{
  int res = 0;
  for (int u=0;u<=9;++u) //出现一次的
    for (int v=0;v<=9;++v) //出现三次的
    {
      if(u==v)   //如果相同则跳过
        continue;
      int a=0,b=0,c=0;  //a 年     b 月日      c时分
      for(int pos = 0;pos<4;++pos){
        int nums[4];
        for (int i=0;i<4;++i) //不同位置的可能
          if (i==pos)
            nums[i] = u;
          else
            nums[i] = v;
        int y = nums[0]*1000+nums[1]*100+nums[2]*10+nums[3];
        a++;
        int m = y/100,d=y%100;
        if(m>=1 && m<= 12 && d>=1 && d<=30)
          b++;
        if(m>=0 && m<= 23 && d>=0 && d<=59)
          c++;
      }
      res +=a*b*c;
    }
  cout <<res <<endl;
  // 请在此输入您的代码
  return 0;
}

第八题 相乘

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小蓝发现,他将 11 至 10000000071000000007 之间的不同的数与 20212021 相乘后再求除以 10000000071000000007 的余数,会得到不同的数。 小蓝想知道,能不能在 11 至 10000000071000000007 之间找到一个数,与 20212021 相乘后 再除以 10000000071000000007 后的余数为 999999999999999999。如果存在,请在答案中提交这个数; 如果不存在,请在答案中提交 00。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M
#include <iostream>
using namespace std;
typedef long long LL;

int main()
{
  for (LL i = 1;i<=1000000007;i++){
    if ((i*2021)%1000000007==999999999){
      cout << i<<endl;
      return 0;
    }
  }
  cout << 0 <<endl;
  // 请在此输入您的代码
  return 0;
}

#include  <climits>

cout << LONG_LONG_MAX<<endl;//输出longlong的最大范围

cout << INT_MAX << endl;//int的最大范围

猜你喜欢

转载自blog.csdn.net/lishijie258/article/details/128570160