ztr loves math
Accepts: 315
Submissions: 1975
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
题意很简单,就不多说了。我用的方法比较复杂,打表。但是后来又看到了别人的做法,感觉比较简单,但是不容易想到。
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 999999;
int a[N]={0};
int main()
{
for(int i=1;i<N;i++)
for(int j=i+1;j*j-i*i<N;j++)
a[j*j-i*i]=1;
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
if(a[n])
printf("True\n");
else
printf("False\n");
}
return 0;
}
简单代码的:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
if(n==3||(n>4&&n%4!=2))
printf("True\n");
else
printf("False\n");
}
return 0;
}
ztr loves lucky numbers
Accepts: 99
Submissions: 736
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
这个题目是真不会啊,到了最后也没做出来,然后看了别人的解题报告,学到了一个新函数next_permutation
这是一个求一个一个序列的全排列的函数,具体用法我也是看了别人的解析才懂得,推荐kuangbin 和next_permutation
代码如下:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int t;
char str[100],str47[100];
scanf("%d",&t);
while(t--)
{
scanf("%s",str);
int len = strlen(str);
if(len & 1)//其实就相当于 len%2,判断奇偶性,按位与真神奇,二进制好广大
{
for(int i=0;i<=len/2;i++)
printf("4");
for(int i=0;i<=len/2;i++)
printf("7");
printf("\n");
continue;
}
//长度为偶数的情况
for(int i=0;i<len/2;i++)
str47[i]='4';
for(int i=len/2;i<len;i++)
str47[i]='7';
int flag=1;
str47[len]='\0';//终止符
do
{
if(strcmp(str47,str)>=0)
{
printf("%s\n",str47);
flag=0;
break;
}
}while(next_permutation(str47,str47+len));
if(flag)
{
for(int i=0;i<=len/2;i++)
printf("4");
for(int i=0;i<=len/2;i++)
printf("7");
printf("\n");
}
}
return 0;
}