分析:在解决这个问题前,我们首先要知道函数的参数是什么,首先就是要明确两人所报数的总个数m,这个是要做为我们初次循环的先决条件,知道了m,我们就知道了这个算法的时间复杂度了。其次我们还要明确尼克和格莱尔所报次数的上线x、y,这两个变量是决定了两人报数相同次数的重要标志,知道了x、y我们就知道了算法循环一次所重复的数字个数。
所以除去上述的三个参数,我们还需要声明三个变量,c、d、num。c作为尼克的所报数字,d作为格莱尔所报数字,num作为所报相同数字的个数。当尼克和格莱尔所报数字相同时,也就是c = d时,num 加一。同时,当c 等于尼克所报数字时,c归零,同理d也是如此。
python:
def jishu(n, nk,glr):
c = 0
d = 0
sum = 0
i = 0
while i < n:
c = c + 1
d = d + 1
i = i + 1
if c == d :
sum = sum+1
if c == nk:
c=0
if d == glr:
d=0
return sum
n = int(input("请输入总数:"))
nk = int(input("请输入尼克1~x报数的x:"))
glr = int(input("请输入格莱尔1~y报数的y:"))
print("同时报相同数的次数是",jishu(n,nk,glr))
java:
import java.util.Scanner;
//报数问题
public class baoShuWenTi {
public static int baoshu(int n, int nk, int glr){
int c = 0,d = 0,num = 0;
for (int i = 0; i < n; i++) {
c++;d++;
if (c == d) num++;
if (c==nk)c=0;
if (d==glr)d=0;
}
return num;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入所报总数:");
int n = scanner.nextInt();
System.out.println("请输入尼克报数上限:");
int x = scanner.nextInt();
System.out.println("请输入格莱尔报数上限:");
int y = scanner.nextInt();
int num = baoshu(n,x,y);
System.out.println("尼克和格莱尔所报相同数为:"+num);
}
}
js:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="" method="" style="width: 300px;height: 300px; margin: auto;display: flex;flex-direction: column;justify-content: space-around;">
<div id="" style="width: 100%;;display: flex;justify-content: space-between;">
所报总数:<input type="text" name="" id="ip1" />
</div>
<div id="" style="width: 100%;;display: flex;justify-content: space-between;">
尼克按1~x报数:<input type="text" name="" id="ip2" />
</div>
<div id="" style="width: 100%;;display: flex;justify-content: space-between;">
格莱尔按1~y报数:<input type="text" name="" id="ip3" />
</div>
<h2 id="h2"></h2>
<button type="button" style="width: 100%;" id="btn">确定</button>
</form>
</body>
<script type="text/javascript">
let c = 0,d = 0,num = 0;
let n = document.getElementById("ip1")//获取所报总数input节点
let nk = document.getElementById("ip2")//获取尼克按1~x报数input节点
let glr = document.getElementById("ip3")//获取格莱尔按1~y报数input节点
let h2 = document.getElementById("h2")
let btn = document.getElementById("btn")
btn.onclick=function(){
let str = baoshu(n.value,nk.value,glr.value)//注意:获取节点的value值一定不能直接在获取节点的同时链式操作。!!!!
console.log(str)
h2.innerHTML = "两人同时报相同数的次数为:"+str
}
function baoshu(n,nk,glr){
for (var i = 0; i < n; i++) {
c++,d++;
if(c == d)num++;
if(c == nk)c = 0;
if(d == glr)d = 0;
}
return num;
}
</script>
c++:
#include <iostream>
using namespace std;
int baoshu(int n ,int nk,int glr){
int c = 0,d = 0, sum = 0;
for(int i = 0;i< n ;i++){
c++;d++;
if(c == d)sum++;
if(c == nk) c=0;
if(d == glr)d=0;
}
return sum;
}
int main(){
int n;
cout<<"请输入报数总数:"<<endl;
cin>>n;
int nk;
cout<<"请输入尼克报数上限:"<<endl;
cin>>nk;
int glr;
cout<<"请输入格莱尔报数上限:"<<endl;
cin>>glr;
cout<<"尼克和格莱尔所报相同数为:"<< baoshu(n,nk,glr);
}