完美的数组
题目描述
对于一个n个元素的整数数组,如果这个数组两个连续元素的差的绝对值包括了[1,n-1]之间的所有整数,则这个数组叫做“完美的数组”,如数组1 4 2 3,因为差的绝对值分别为:3,2,1。符合条件,因此是一个“完美数组”。那么如何用计算机实现判断一个数组是不是“完美数组”呢?
输入描述
第一行是一个整数n(1≤n≤1000),表示整数的个数
第二行是n个空格隔开的在[-10^8,10^8]之间的整数。
输出描述
输出一行,如果是完美的数组,则输出"Jolly",否则输出"Not jolly"。
样例
输入
4 1 4 2 3
输出
Jolly
提示
有n个数,那么两两之间有一个差,所以一定有n-1个差。
这n-1个差的绝对值,包含[1,n-1]之间的所有数。那也就是说,如果排好了序,每个数都应该是连续且唯一,才能占满整个范围(1~n-1)。
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int a[10000005];
int b[10000005];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n-1;i++){
b[i]=abs(a[i]-a[i+1]);
}
sort(b+1,b+n);
for(int i=1;i<=n-1;i++){
if(b[i]!=i){
cout<<"Not jolly";
return 0;
}
}
cout<<"Jolly";
return 0;
}
金币
题目描述
乔治在梦中来到了一个神奇部落,这个部落的神树具有奇特的功能:对于 每一位新朋友,都会获赠金币,而且金币的数量会随时间的延续而增加: 第 1 周,每天 1枚金币; 第 2 周,每天 2枚金币; 第 3 周,每天 3枚金币;⋯⋯ 请问:至少多少天,乔治的金币数量达到 n 枚?
输入描述
一行,只有一个正整数 n。
输出描述
一行,一个整数,表示金币达到 n 枚所需的最少天数。
样例
输入
30
输出
17
提示
【样例说明】
第 1 周:每天 1 枚,共 7 枚;
第 2 周:每天 2 枚,共 14 枚; 第 3 周:每天 3 枚,3 天即可: 7+14+3*3=30 。
共计: 7+7+3 = 17 天。
【数据规模】
对于 30%的数据, n 不超过 2147483647 ; 对于 100%的数据, n 的位数不超过 18。
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
long long n;
long long cnt=1;
long long s,i;
int main(){
cin>>n;
while(s<n){
s+=cnt;
i++;
if(i%7==0){
cnt++;
}
}
cout<<i;
return 0;
}
鸢尾花数
题目描述
所谓鸢尾花数,是指一个正整数的十进制表示中,任意相邻两位的数字之差是一个常数,比如12345,8642,66666都是鸢尾花数,而88910与121不是鸢尾花数。
给定一个区间[a,b],请找出在a到b之间的所有鸢尾花数。
输入描述
单独一行:两个正整数a与b
输出描述
单独一行:表示给定区间内所有的鸢尾花数,以空格隔开。如果该区间内没有鸢尾花数,输出-1
。
输入样例
100 150
输出样例
111 123 135 147
数据描述
1≤a,b≤105
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int x[100005];
int main(){
int a,b;
bool ff=0;
cin>>a>>b;
for(int i=a;i<=b;i++){
int m=i,n=1;
while(m!=0){
x[n]=m%10;
m/=10;
n++;
}
bool f=1;
int y=x[2]-x[1];
//cout<<y<<" ";
for(int j=3;j<=n-1;j++){
if(x[j]-x[j-1]!=y){
f=0;
break;
}
}
if(f==0){
continue;
}
else{
ff=1;
cout<<i<<" ";
}
}
if(ff==0){
cout<<"-1";
}
return 0;
}