15488
#include
using namespace std;
int main ()
{
int N=1200000;
int cnt=0;
for (int i=1;i*i<=N;i++)
{
if (N%i==0)
{
if (N%i==i)
{
cnt=cnt+1;
}else {
cnt=cnt+2;
}
}
}
cout<<cnt<<endl;
return 0;
}
结果是 96
#include
using namespace std;
int main()
{
int cnt=0;
for (int i=1;i<=2019;i++)
{
bool ok=false;
int N=i;
while (N)
{
if (N%10==9)
{
ok=true;
break;
}
N=N/10;
}
if (ok)
{
cnt++;
}
}
cout<<cnt<<endl;
return 0;
}
结果是544
2018
#include
using namespace std;
int main ()
{
int cnt=0;
int n;
cin>>n;
int a[1100];
for (int i=0;i<n;i++)
{
cin>>a[i];
}
for (int j=0;j<n;j++)
{
bool ok=false;
for (int i=j-1;i>=0;i--)
{
for (int k=j+1;k<n;k++)
{
if (a[j]>a[i]&&a[j]<a[k])
{
cnt++;
ok=true;
break;
}
}
if (ok)
{
break;
}
}
}
cout<<cnt<<endl;
return 0;
}
一般我们的计算机一秒钟可以做的循环大概是10e8,这个题时间复杂度不会算就生成了1000个随机数试了下没有问题。
#include
#include
using namespace std;
int main ()
{
int cnt=0;
char str[110];
cin>>str;
int len =strlen(str);
bool ok=false;
for (int i=0;i<len;i++)
{
if (!ok&&(str[i]!='a'&&str[i]!='e'&&str[i]!='i'&&str[i]!='o'&&str[i]!='u'))
{
ok=true;
cnt++;
}
if (ok&&(str[i]=='a'||str[i]=='e'||str[i]=='i'||str[i]=='o'||str[i]=='u'))
{
cnt++;
ok=false;
}
}
if (cnt==4)
{
cout<<"yes"<<endl;
}else {
cout<<"no"<<endl;
}
return 0;
}
#include
using namespace std;
int main()
{
int n;
cin>>n;
int cnt=0;
for (int i=1;i<=n;i++)
{
int N=i;
int k=10;
bool ok=true;
while (N)
{
if (N%10>k)
{
ok=false;
}
k=N%10;
N=N/10;
}
if (ok)
{
cnt++;
}
}
cout<<cnt<<endl;
return 0;
}
#include
using namespace std;
char a[1100][1100];
char b[1100][1100];
int T = 0;
int n, m;
void f(int x, int y)
{
int t = T;
for (int t = 1; t <= T; t++)
{
for (int i = 0; i <= t; i++)
{
if ((x - i) >= 0 && (x - i) < n && (y - t + i) >= 0 && (y - t + i) < m)
{
b[x - i][y - t + i] = 'g';
}
}
for (int i = 0; i <= t; i++)
{
if ((x - t + i) >= 0 && (x - t + i) < n && (y + i) >= 0 && (y + i) < m)
{
b[x - t + i][y + i] = 'g';
}
}
for (int i = 0; i <= t; i++)
{
if ((x + i) >= 0 && (x + i) < n && (y + t - i) >= 0 && (y + t - i) < m)
{
b[x + i][y + t - i] = 'g';
}
}
for (int i = 0; i <= t; i++)
{
if ((x + t - i) >= 0 && (x + t - i) < n && (y - i) >= 0 && (y - i) < m)
{
b[x + t - i][y - i] = 'g';
}
}
}
}
int main()
{
cin >> n >> m;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin>>a[i][j];
b[i][j] = a[i][j];
}
}
cin >> T;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (a[i][j] == 'g')
{
f(i, j);
}
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << b[i][j];
}
cout << endl;
}
return 0;
}
在纸上比划一下,很容易发现一圈一圈画棱形就好了,比较简单
#include
#include
using namespace std;
int a[1100];
int cnt=0;
void dfs (int k,int t)
{
if (k==0||(t!=1&&k<=1))
{
return ;
}
if (t==1)
{
for (int i=1;i<=k;i++)
{
a[t]=i;
cnt++;
dfs (abs(a[t-1]-a[t]),t+1);
}
}
if (t>1)
{
for (int i=1;i<k;i++)
{
a[t]=i;
cnt++;
dfs (abs(a[t-1]-a[t]),t+1);
}
}
}
int main()
{
int n;
cin>>n;
a[0]=n;
dfs(n,1);
cout<<cnt%10000<<endl;
return 0;
}
写之前就已经明白注定不会过,果然只有50%的数据可以,
其实是有思路的,例如当abs(a[t-1]-a[t])等于4时那么后面就还有7种组合序列
只要找个数组存起来,那下次在遇到abs(a[t-1]-a[t])等于4时,就不用在搜一遍了
像这样把搜过一遍的都存起来,就可大大节约时间,应该就可以过了,
可惜这个思路的代码不会写,惭愧。。。。
#include
#include
#include
using namespace std;
int num[100100],num1[100100];
int cnt[100100];
bool cmp(int x,int y)
{
return x>y;
}
int main ()
{
memset(cnt,0,sizeof(cnt));
int n,m;
cin>>n>>m;
for (int i=0;i<n;i++)
{
cin>>num[i];
num1[i]=num[i];
}
sort(num,num+n,cmp);
for (int i=0;i<m;i++)
{
cnt[num[i]]++;
}
int t=0;
for (int i=0;i<n;i++)
{
if (cnt[num1[i]]!=0)
{
cnt[num1[i]]-=1;
if (t==0)
{
cout<<num1[i];
}else if (t!=0)
{
cout<<" "<<num1[i];
}
t+=1;
if (t==m)
{
break;
}
}
}
cout<<"ok"<<endl;
return 0;
}
随机生成100000个随机数试了一下,没有问题
关于sort排序:旧版 C++ 标准中仅要求它的平均时间复杂度达到O(nlogn),但 C++11 标准要求它的最坏时间复杂度是达到 O(nlogn),所以可以大胆用,不怕超时。