笔试强训每日一题
Posted 小赵小赵福星高照~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔试强训每日一题相关的知识,希望对你有一定的参考价值。
笔试强训每日一题(十一)
文章目录
递归乘法
题目链接
题目描述
递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。
示例1:
输入:A = 1, B = 10
输出:10
示例2:
输入:A = 3, B = 4
输出:12
题目思路
A,B两数相乘,就是把第A数字相加B次,以大事化小的思想:A数字相加B次相当于A+A数字相加B-1次,当B为0时,任何数乘0都为0,当B等于1时,任何数等1都为它本身
题目代码
class Solution
public:
int multiply(int A, int B)
//写一个递归函数,不使用*运算符,实现两个正整数的相乘
if(B == 0)
return 0;
if(B == 1)
return A;//返回本身
return A+multiply(A,B-1);
;
挑7
题目链接
题目描述
输出小于等于 n 的与 7 有关数字的个数,包括 7 的倍数,还有包含 7 的数字(如 17 ,27 ,37 … 70 ,71 ,72 ,73…)的个数(一组测试用例里可能有多组数据,请注意处理)
数据范围: 1 <= n <= 30000,本题有多组输入
输入描述
多组输入每组输入 1 个正整数 n 。( n 不大于 30000 )
输出描述
不大于n的与7有关的数字个数,例如输入20,与7有关的数字包括7,14,17
题目解析
这道题暴力破解即可,首先是7的倍数的需要统计,其次是数字中包含7的数字也需要统计,循环获取数字的每一位进行判断就行,但是要注意不要重复统计了,比如 70 ,既是 7 的倍数,也包含 7 ,然而只需要统计一次即可。如果不想暴力破解,可以考虑n的范围是在30000以内,因此一个数字只要符合以下任一条件即可:
i % 7 == 0 整除
i % 10 == 7 个位是7
(i / 10) % 10 == 7 十位是7
(i / 100) % 10 == 7 百位是7
(i / 1000) % 10 == 7 千位是7
题目代码
#include<iostream>
using namespace std;
int main()
int n;
while(cin>>n)
int count = 0;
for(int i = 7;i <= n;i++)
if(i%7 == 0)
count++;//是7的倍数
continue;//跳过下面的代码,继续循环
int num = i;
while(num)
if(num%10 == 7)
count++;//各个位上含7
break;
num/=10;
cout<< count <<endl;
return 0;
考虑到范围要求,我们还可以这样写:
#include<iostream>
using namespace std;
int main()
int n;
while(cin>>n)
int count = 0;
for(int i = 7;i <= n;i++)
if((i % 7) == 0 || (i % 10) == 7 || ((i / 10) % 10) == 7 ||
((i / 100) % 10) == 7 ||((i / 1000) % 10) == 7)
count++;//是7的倍数
cout<< count <<endl;
return 0;
以上是关于笔试强训每日一题的主要内容,如果未能解决你的问题,请参考以下文章