CCCC周六/水仙花数/hdu1408,完数/

本文介绍了如何解决寻找大于等于给定整数M的最小水仙花数的问题,并提供了一种有效的算法实现。此外,还探讨了素数判断的方法,通过一个具体的程序实例解释了如何计算指定范围内素数的数量。


//18.3.10
cccc选拔赛/
对..倒数第二那个就是我,还是因为倒数第一来晚了一个多小时


= -...怎么说,比赛的时候还是很重要的吧,代码出现了问题要学会自己改
= -...好困啊


https://vjudge.net/contest/214770#rank


D 水仙花数
https://vjudge.net/contest/214770#problem/D
题目应该不复杂,但是不知道为啥有一个小点///
题意理解!!!
[题目]
水仙花数是指一个 n 位数 ( n >= 3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)
给出一个整数M,求 >= M的最小的水仙花数。
Input
一个整数M(10 <= M <= 1000)
Output
输出>= M的最小的水仙花数
Sample Input
99
Sample Output
153
[代码是干嘛的?]不高效的重复是干嘛的,数据小就可以用for循环复制粘贴为所欲为吗???..


最开始想... k=2 k=3  没了
其实  n>=3..   10<=M这就是一个坑(仔细读题)
再然后..  是>=M 的 不是说到了M 就终止了


所以看[极限条件]的话,是输入1000之后输出比M 大最小水仙花数
这时候k=2  k=3就很没劲了...
所以还是不要偷懒了.. 
所以还是不要偷懒了.....
while (m)
{
k++;
m =m/ 10;
}


这么一个题竟然有两个坑...幸好坐着坐着做对了
[注意极限条件  注意极限条件]
虽然m可以取到10但是大概率那时候是不行的
m取到1000的时候也不是啥也不干而是向后巴拉巴拉


D

#include<iostream>
#include<set>
#include<math.h>
using namespace std;
int main()
{
	int n; cin >> n;
	// 2 3 4 次方..肯定会超时吧= -
//	int k=0;
	int m;
	for (int i = n; ; i++)
	{
		m = i;
		int sum = 0;
		if (m < 100 && m >= 10)continue;//k = 2;
		int k = 0;
		while (m)
		{
			k++;
			m =m/ 10;
		}
		m = i;
		//if (m >= 100 && m < 1000)k = 3;
		//if (m >= 1000)k = 5;
		int l = k;
		while(k--)
		{
			sum = sum + pow((m % 10),l);
			m = m / 10;
			
		}
		if (sum == i) {
			cout << i << endl; break;
		}
		//if k=1000  impossible
		//int sum = 0;
	}
	return 0;
}



///代码////
F....相似的题昨天刚写了.....
https://vjudge.net/contest/214770#status/StrongerIrene/F/0/
1,判断素数的话其实也不复杂啊= -
稍微注意一下
**[最后+1//碰到自己[碰到自己的时候!]不算]
[(手动醒目)]*****
if (x%i == 0)
sum = sum + i + (x / i);
下面是/  上面是%  啊! %的话是0啊


2,
for ( i = num1; i <= num2; i++)
这个等号,一定记得= -
很多地方的等号,都要一定记得= =


3,不容易想到啊,num1和num2没说哪个大哪个小啊
积累经验吧,这题目真的是


互换的话,,num1>num2才不满足条件,需要强行改成num1<num2的,才正常...(不会打句号)

#include<iostream>
#include<set>
#include<math.h>
using namespace std;
bool nor(int x)
{
//	int k;
	int sum = 0;
	for (int i = 2; i*i <=x; i++)//这个就是sqrt?
	{
		if (x%i == 0)
			sum = sum + i + (x / i);
	}

	if (sum+1 == x)return true;
	return false;


}
int main()
{
	int n; cin >> n;
	//似乎打表就可以????这个题?????
	//等下完了吃完饭去找兔周写作业
	while (n--) {
		int num1, num2;
		cin >> num1 >> num2;
		int k;
		if (num1 > num2)
		{

			k = num2;
			num2 = num1;
			num1 = k;

		}
		int count = 0;
int i = 0;
		for ( i = num1; i <= num2; i++)
		{
			if (nor(i))count++;
		}
		cout << count << endl;
	}
	return 0;
}

认真读题(严肃脸)

A https://vjudge.net/contest/214770#status/StrongerIrene/A/0/

这个其实也还好,读题读明白只是在求.. 只是在求这个字符串是不是劈开一半儿还对称罢了= -

完了?完了...

就是bool那里需要花点功夫......算是暴力搞的这个题- =上次好像因为没用bool而是急着直接输出YES 和NO搞错过几个

还是直接写bool来的方便和快.....

看了一下,这样写可以

  1. if(len%2==1) {  
  2.             cout<<"NO"<<endl;  
  3.         }  
  4.         else

有个人写的return 0 ,虽然过了但是我脚的应该不对()

然后... 在语句里面写break应该问题不大了,反正这两个要区分开

用if else这个真不错..... 我是把判断奇数这个扔下面去了==

一旦不符合就break也还行吧,用bool标记上(还是,别忙着输出'no")

(似乎bool q =false会不对?...有个小问题 留着晚上评论区解答)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值