首页 > 试题广场 >

要求先给出思路,然后写代码,可以使用cc++javap

[问答题]
要求先给出思路,然后写代码,可以使用c/c++/java/python或者伪代码描述。
有两个数,A和B,六种操作分别是+12,-12,+7,-7,+5,-5。A经过若干次操作,变成B 。
输入任意2个数A和B,要给出变换过程,这其中的操作序列就是一个路径,也就是最少的操作次数。
#include<iostream> using namespace std; int main(){ int n, temp, count = 0; cin >> n; //当n不是一位数 while(n > 9){ //计算n的所有位数上的数字的乘积temp temp = 1; while(n){ //n%10为当前n末位上的数字 temp *= n % 10; //移去末位 n /= 10; } //每次n变换为n的所有位数上的数字的乘积 n = temp; //变换次数加一 count++; } cout << count << endl; return 0; }</iostream>
发表于 2019-03-11 23:29:44 回复(0)
这是网上找的答案,哪位大神知道 node节点里的 dx 的作用啊?   可以简单解释一下这个算法吗
#include <iostream>   
#include <queue>   
using   namespace  std;  
class  node  
{  
public :  
int  x,dx;  
struct  node *prev;  
node( int  y, int  dy, struct  node *p):x(y),dx(dy),prev(p){}  
};  
int  main()  
{  
queue<node *> Q;  
int  a, b, i, d[] = {12,-12,7,-7,5,-5};  
cin >> a >> b;  
node *t;  
 Q.push( new  node(a,0,NULL));  
while (!Q.empty())  
{  
 t = Q.front();  
  if (t->x == b) break ;  
 Q.pop();  
for (i=0; i<6; i++)  
 Q.push( new  node(t->x+d[i],d[i],t));  
}  
while (t->prev)  
{  
 cout << t->dx << endl; 
  t = t->prev;  
 }  
  return  0;  
}
编辑于 2016-04-02 18:56:54 回复(0)
先用求出能用12,7,5分割的最小余数
d_value=abs(A-B)
multiple_12=d_value/12
multiple_7=d_value%12/7
multiple_5=d_value%12%7/5
reminder_value=d_value%12%7%5
剩下的reminder_value无非1,2,3,4,用BFS的思想层层遍历可以吗,看过别人做的,开始就用广度优先,这样计算量不是很大吗

发表于 2015-10-29 21:34:06 回复(0)