//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来的方便和快.....
看了一下,这样写可以
- if(len%2==1) {
- cout<<"NO"<<endl;
- }
- else{
有个人写的return 0 ,虽然过了但是我脚的应该不对()
然后... 在语句里面写break应该问题不大了,反正这两个要区分开
用if else这个真不错..... 我是把判断奇数这个扔下面去了==
一旦不符合就break也还行吧,用bool标记上(还是,别忙着输出'no")
(似乎bool q =false会不对?...有个小问题 留着晚上评论区解答)