蝉知和wordpress,有实力seo优化费用,电子商务网站建设与维护第二版,医疗网站源码1、MT1173魔数
一个数字#xff0c;把他乘以二#xff0c;会得到一个新的数字#xff0c;如果这个新数字依然由原数中那些数字组成#xff0c;就称原数为一个魔数。输入正整数N#xff0c;检查它是否是一个魔数#xff0c;输出YES或者NO。
格式
输入格式#xff1a; …1、MT1173魔数
一个数字把他乘以二会得到一个新的数字如果这个新数字依然由原数中那些数字组成就称原数为一个魔数。输入正整数N检查它是否是一个魔数输出YES或者NO。
格式
输入格式
输入正整数N
输出格式
输出YES或者NO
样例 1
输入
142857输出
YES分析过程
看到这个题目的时候第一想法是将输入数存入到一个数组当中然后计算出2倍的输入数然后拿计算出来的数一一和输入数的每一位进行对比。但是在分析的时候发现我遗漏了一下条件这个题目需要实现的是两个条件
得到的两个数的个数相同即每个数出现的次数应该是一样的得到的两个数中的数字顺序可以不同但是所含数字是一样的。
所以按照上述条件我的解决思路是先将两个数存入到两个数组当中然后对两个数组里面的元素进行排序如果每个元素都相同的话则输出YES否则输出NO。 然后按照这个思路我写了一段代码
#includebits/stdc.h using namespace std;int main( )
{int n,a[10] {0},b[10]{0};cin n;int qn,m 2 * n,pm;int flag 1;int count0;
//首先将输入数存入数组中while(n!0){a[count]n%10;n/10;count;}//然后使用冒泡排序对输入数的元素进行从小到大排序for(int i0;icount-1;i){for(int j0;icount-i-1;i){//习惯性的把循环变量写成了i,但是在这应该是jif(a[j]a[j1]){int tmp a[j];a[j]a[j1];a[j1]tmp;}}}
//将输入数的2倍数存入数组中while(m!0){count 0;//count每次放在里面每次循环都置为0最终结果只能是1所以应该放在外面b[count]m%10;m/10;count;}for(int i0;icount-1;i){for(int j0;icount-i-1;i){//这个也是同样的错误if(a[j]a[j1]){//这里是对b数组排序而不是a这里直接复制了没有修改应该全部修改为bint tmp a[j];a[j]a[j1];a[j1]tmp;}}} for(int z0;zcount;z){//这里的判断语句就是错的如果是,那么永远无法为NO所以这里应该修改为if(a[z]!b[z]){flag 0;break;}}if(flag1) cout YES;else cout NO;return 0;
}
但是只能通过一个用例 于是又开始了找错~
发现了好多个错误难怪呢于是我把错误全部标在了上一个代码中。
修改错误后得到了我想法的最终代码
实现代码
#includebits/stdc.h using namespace std;int main( )
{int n,a[10] {0},b[10]{0};cin n;int qn,m 2 * n,pm;int flag 1;int count0,tmp;
//首先将输入数存入数组中while(n!0){a[count]n%10;n/10;// cout a[count];count;}// cout count;//然后使用冒泡排序对输入数的元素进行从小到大排序for(int i0;icount-1;i){for(int j0;jcount-1-i;j){if(a[j]a[j1]){tmp a[j];a[j]a[j1];a[j1]tmp;}}} // for(int i0;icount;i){// cout a[i];// }
//将输入数的2倍数存入数组中count 0;while(m!0){b[count]m%10;m/10;// cout b[count];count;}// cout count;for(int i0;icount-1;i){for(int j0;jcount-1-i;j){if(b[j]b[j1]){tmp b[j];b[j]b[j1];b[j1]tmp;}}} // for(int i0;icount;i){// cout b[i];// }for(int z0;zcount;z){if(a[z]!b[z]){flag 0;break;}}if(flag1) cout YES;else cout NO;return 0;
}
我的这个思路感觉有点繁琐所以看了一下评论区的思路。
每个数字出现的次数要相等用a、b两个数组分别记录两个数中每个数字0~9出现的个数再比较a、b是否相等。 用这个思路解决代码行数大大减少但是对于我来说很难想到现在慢慢学吧。
#includebits/stdc.h using namespace std;int main( )
{int n,a[10] {0},b[10]{0};cin n;int qn,m 2 * n,pm;int flag 1;while(n!0){int in%10;a[i]1;n/10;}while(m!0){int i m%10;b[i]1;m/10;}for(int z0;z10;z){if(a[z]!b[z]){flag 0;break;}}if(flag1) cout YES;else cout NO;return 0;
}
2、MT1176两个点的距离
给定笛卡尔平面上两个点的坐标求它们之间的距离向上舍入为最接近的整数。
格式
输入格式
输入整型空格分隔
输出格式
输出整型
样例 1
输入
0 0 2 -2输出
3
相关知识点 1、笛卡尔平面 笛卡尔坐标系就是直角坐标系和斜坐标系的统称。 2、直角平面间两点的距离公式 double a pow((y2-y1),2); double b pow((x2-x1),2); double l sqrt(ab); 实现代码
#includebits/stdc.h using namespace std;int main( )
{int x1,y1,x2,y2;cin x1 y1 x2 y2;double a pow((y2-y1),2);double b pow((x2-x1),2);double l sqrt(ab);printf(%.0f,l);// cout l;return 0;
}
我没理解这个和选择结构有什么区别不是输入输出类型的题吗。不理解~ 3、MT1186do-while循环
请编写一个简单程序从大到小输出所有小于n的正整数直到0为止(不含0)。n从键盘输入
格式
输入格式
输入整型数n
输出格式
输出整型空格分隔
样例 1
输入
10输出
10 9 8 7 6 5 4 3 2 1
实现代码
do-while循环不常用记录一下最基本的用法吧。
#includebits/stdc.h using namespace std;int main( )
{int n;cin n;do{cout n ;n--;}while(n0);return 0;
}
do-while语句需要注意的是while后面需要加一个分号“”
除此之外也要注意循环的基本条件注意不能写反了。 明天继续吧。