nyoj 稍具技巧的题(一)

2014-11-24 11:24:02 · 作者: · 浏览: 0

这题可以用中国剩余定理(这个我不会),我用的只是从1到105逐个搜索

[cpp]
#include
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b>>c;
int n=(a*70+b*21+c*15)%105;
if(n>100||n<10) cout<<"No answer"< else cout< return 0;
}
小明的调查作业 nyoj 48
此题根据规模进行,可以开一个a【1005】的数组,每读一个i,
就把a【i】赋值为true,然后遍历输出,重复计算问题,也挺省时间的。

[cpp]
#include
#include
using namespace std;
int main()
{
int n, num;
int count=0;
int vis[1005];
cin>>n;
memset(vis, 0, sizeof(vis));
while(n--)
{
cin>>num;
if(!vis[num])
{
vis[num]=1;
count++;
}
}
cout< for(int i=1;i<=1000;i++)
if(vis[i])
cout<
cout< return 0;
}
数的长度 nyoj 69

此题有一种很准确的方法叫斯特林(Stirling)公式;

还有一种也能行,不过数太大时就不是非常准确的方法:

for(int i=1;i<=m;i++)
num += log10(i);

就是对每个乘数取对数

[cpp]
#include
#include
using namespace std;
int main()
{
int N;
cin>>N;
while(N--)
{
int m;
double num = 0.0;
cin>>m;
for(int i=1;i<=m;i++)
num += log10(i);
cout<<(int)(num)+1< }
return 0;
}
房间安排 nyoj 168
用数组a【201】存放第i天中每天需要的房间数,读房间数、天数,然后找出数组中

最大的元素#include
int p = max_element(a, a+200)-a;
cout< [cpp]
#include
#include
#include
using namespace std;
int a[201]; //第i天的房间数
int main()
{
int T;
cin>>T;
while(T--)
{
memset(a, 0, sizeof(a));
int N, num, start, day;
cin>>N;
while(N--)
{
cin>>num>>start>>day;
for(int i=0;i a[start+i] += num;
}
int p = max_element(a, a+200)-a;
cout< }
return 0;
}
素数 nyoj 169
主函数部分设计的很巧妙,先近后远,距离相等的话先大后小

[cpp]
#include
using namespace std;
bool fan(int a)
{
bool b=true;
int i;
if(a==1)
b=false;
else
for(i=2;i {
if(a%i==0)
{b=false;break;}
}
return b;
}
int main()
{
int n;
cin>>n;
while(n--)
{
int m,i;
cin>>m;
for(i=0;;i++)
{
if(fan(m+i))
{cout< if(fan(m-i))
{cout< }
}
return 0;
}
字母统计 nyoj 241
此题类似重复计数,用一个数组保存,然后用‘a’+index;算是比较巧妙吧

[cpp]
#include
#include
#include
using namespace std;
int num[26];
int main()
{
int N;
string str;
cin>>N;
while(N--)
{
memset(num, 0, sizeof(num));
cin>>str;
char ch;
for(int j=0;j {
ch = str.at(j);
num[(int)(ch-'a')]++;
}
int max = num[0];
int index = 0;
for(int i=0;i<26;i++)
{
if(num[i] > max)
{
max = num[i];
index = i;
}
}
ch = 'a' + index;
cout< }
return 0;
}
16进制的简单运算 nyoj 244
伤心的代码,我用c