算法题0

简介: 第一题:判断数字给定一个整数 n,请你统计其各位数字中 4 和 7 的出现次数。如果 4 的出现次数加上 7 的出现次数恰好等于 4 或 7,则输出 YES,否则输出 NO。例如,当 n=40047 时,4 出现了 2 次,7 出现了 1 次,2+1=3,既不是 4 也不是 7,因此,输出 NO;当 n=7747774 时,4 出现了 2 次,7 出现了 5 次,2+5=7,因此,输出 YES。

第一题:判断数字

给定一个整数 n,请你统计其各位数字中 4 和 7 的出现次数。

如果 4 的出现次数加上 7 的出现次数恰好等于 4 或 7,则输出 YES,否则输出 NO。

例如,当 n=40047 时,4 出现了 2 次,7 出现了 1 次,2+1=3,既不是 4 也不是 7,因此,输出 NO;当 n=7747774 时,4 出现了 2 次,7 出现了 5 次,2+5=7,因此,输出 YES。

输入格式

一个整数 n。

输出格式

一行,YES 或者 NO。

数据范围

所有测试点满足 1≤n≤1018。

输入样例1:

40047

输出样例1:

NO

输入样例2:

7747774

输出样例2:

YES

**分析:这道题不难,用c,c++都能做,我这里用c++做了

源码:**

include

include

include

using namespace std;

int main(void)

{

string n;
cin >> n;
int a=0;
int b=n.length();
for(int i=0;i<b;i++)
{
if(n[i]==52||n[i]==55)
    {
        a++;
    }
}
if(a==4||a==7)
{
cout <<"YES" <<endl;
}else{
cout <<"NO" <<endl;
}
return 0;

}

**新学的c++,练练手,可能以后都要用c++和java了。

第二题:最长合法括号子序列**

一个合法的括号序列满足以下条件:

序列()被认为是合法的。

如果序列X与Y是合法的,则XY也被认为是合法的。

如果序列X是合法的,则(X)也是合法的。

例如,(),()(),(())这些都是合法的。

现在,给定一个由 ( 和 ) 组成的字符串。

请你求出其中的最长合法括号子序列的长度。

注意,子序列不一定连续。

输入格式

共一行,一个由 ( 和 ) 组成的字符串。

输出格式

一个整数,表示最长合法括号子序列的长度。

数据范围

前五个测试点满足, 1≤输入字符串的长度≤10。

所有测试点满足,1≤输入字符串的长度≤106。

输入样例1:

(()))(

输出样例1:

4

输入样例2:

()()(()(((

输出样例2:

6

**分析:这道题用到数据结构中的栈,非常简单。

源码:**

include

include

include

include //记得导入头文件

include

using namespace std;

int main()

{

stack <char>stk;
string s;
cin >> s;
int a=s.length();
int b=0;
for(int i=0;i<a;i++)
{
if(s[i]==40)
    {
        stk.push(s[i]);
    }else if(s[i]==41)
    {
if(stk.empty())
        {
continue;
        }else{
            stk.pop();
            b++;
            b++;
        }
    }
}
cout << b <<endl;
return 0;

}

第三题:电话号码

一个电话销售员正在整理他的电话簿。

电话簿中记录了他的全部客户的电话号码。

一个客户可能有不止一个电话号码。

不同客户可能拥有完全相同的电话号码。

电话簿中一共包含 n 条记录。

每条记录都是首先包含一个字符串,表示客户的姓名,然后包含一个整数,表示本条记录包含的电话号码数量,最后是本条记录所包含的电话号码。

不同客户的姓名两两不同,所以如果两条记录包含的客户姓名相同,那么我们认为这都是记录的同一人的电话信息。

同一记录中可能包含相同的电话号码,不同记录中也可能包含相同的电话号码。

在进行整理时,应遵守如下原则:

如果一个客户拥有多条记录,则需要将这些记录进行合并,每人只保留一条记录,去记录他的全部有效号码。

如果一个客户记录的多个电话号码完全相同,则只保留一个作为有效号码,其余的全部视为无效号码。

如果一个客户记录的两个不同电话号码 a 和 b 满足 a 是 b 的后缀,则号码 a 视为无效号码。

请输出整理后的电话记录。

输入格式

第一行包含整数 n,表示记录数量。

接下来 n 行,每行描述一条记录,首先包含一个长度不超过 10 的由小写字母构成的非空字符串,表示客户姓名,然后包含一个不超过 10 的正整数,表示本条记录包含的号码数量,最后包含本条记录的所有号码,每个号码都是长度不超过 10 的由数字构成的非空字符串,可能包含前导 0。

输出格式

首先输出一个整数 m,表示完成整理后的记录数量。

接下来 m 行,每行输出一条记录信息,格式要求与输入一致。

同一行的数据之间用单个空格隔开。

记录的先后顺序随意,一条记录中的号码顺序随意。

数据范围

前三个测试点满足 1≤n≤4。

所有测试点满足 1≤n≤20。

输入样例1:

2

i 1 00123

m 1 00123

输出样例1:

2

m 1 00123

i 1 00123

输入样例2:

3

l 2 612 12

p 1 12

k 1 612

输出样例2:

3

k 1 612

p 1 12

l 1 612

输入样例3:

4

i 3 123 123 456

i 2 456 456

i 8 789 3 23 6 56 9 89 2

d 2 23 789

输出样例3:

2

d 2 23 789

i 4 789 123 2 456

分析:有点难,暂定

目录
相关文章
|
算法 搜索推荐 Shell
带你快速掌握使用c++写一些基本的算法
带你快速掌握使用c++写一些基本的算法
57 0
|
1月前
|
存储 算法 C++
【算法】粘木棍问题(C/C++)
【算法】粘木棍问题(C/C++)
|
2月前
|
算法
算法题(5)
算法题(5)
25 11
|
2月前
|
算法
算法题(9)
算法题(9)
18 4
|
2月前
|
算法
算法题(8)
算法题(8)
13 4
|
自然语言处理 算法 程序员
解答算法题的一个小技巧
解答算法题的一个小技巧
|
6月前
|
算法 定位技术
Hello 算法
Hello 算法
232 0
|
算法
Warshall算法
Warshall算法
233 0
Warshall算法
|
JavaScript 算法 前端开发
vueDiff 算法解读
前言 在面试中谈到 vue 源码,一般都会扯扯 diff 算法,而这个 diff 又在网上传的神乎其神的,说是提升了页面更新性能,我们一起看看到底咋回事吧
推公式算法的实现
推公式算法的实现
推公式算法的实现