nyoj 稍具技巧的题
这题可以用中国剩余定理(这个我不会),我用的只是从1到105逐个搜索
[cpp]
#include<iostream>
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"<<endl;
else cout<<n<<endl;
return 0;
}
小明的调查作业 nyoj 48
此题根据规模进行,可以开一个a【1005】的数组,每读一个i,
就把a【i】赋值为true,然后遍历输出,重复计算问题,也挺省时间的。
[cpp]
#include<iostream>
#include<cstring>
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<<count<<endl;
for(int i=1;i<=1000;i++)
if(vis[i])
cout<<i<<" ";
cout<<endl;
return 0;
}
数的长度 nyoj 69
此题有一种很准确的方法叫斯特林(Stirling)公式;
还有一种也能行,不过数太大时就不是非常准确的方法:
for(int i=1;i<=m;i++)
num += log10(i);
就是对每个乘数取对数
[cpp]
#include<iostream>
#include<cmath>
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<<endl;
}
return 0;
}
房间安排 nyoj 168
用数组a【201】存放第i天中每天需要的房间数,读房间数、天数,然后找出数组中
最大的元素#include<algorithm>
int p = max_element(a, a+200)-a;
cout<<a[p]<<endl;
[cpp]
#include<iostream>
#include<cstring>
#include<algorithm>
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<day;i++)
a[start+i] += num;
}
int p = max_element(a, a+200)-a;
cout<<a[p]<<endl;
}
return 0;
}
素数 nyoj 169
主函数部分设计的很巧妙,先近后远,距离相等的话先大后小
[cpp]
#include<iostream>
using namespace std;
bool fan(int a)
{
bool b=true;
int i;
if(a==1)
b=false;
else
for(i=2;i<a;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<<m+i<<endl;break;}
if(fan(m-i))
{cout<<m-i<<endl;break;}
}
}&n
补充:软件开发 , C++ ,