版权声明:转载请注明出处https://blog.csdn.net/hhmy77 https://blog.csdn.net/hhmy77/article/details/88779606
武功秘籍
思维题 注意题目条件说明书本第一页为0
(0,1) (2,3) (3,4)…(n-1,n)
观察发现 如果是从奇数页开始 那么我们撕下此页 并且+1从偶数页算起
如果是从偶数页开始 则每撕一页就页数就加2
重复上述操作 我们一直撕到结束页为止
#include<bits/stdc++.h>
using namespace std;
int main()
{
int ans=0;
int i=0;
int n=0,m=0;
cin>>n>>m;
if(n%2!=0)
{
ans++,n++;
}
for(i=n;i<=m;)
{
if(n%2!=0)
{
i++;
ans++;
}
else
{
i+=2;
ans++;
}
}
cout<<ans;
}
等额本金
没什么好说的 细心一点不会错
#include<bits/stdc++.h>
using namespace std;
int main()
{
int sum=30000;
int time=24;
int rate=0.005;
int mean=0;
float num=0;
float cnt=1250+sum*0.005;
int n;cin>>n;
for(int i=1;i<n;i++)
{
sum-=1250;
cnt+=1250+sum*0.005;
}
cout<<cnt;
// cout<<1250+sum*0.005;
}
猜字母
注意看题目 重复拼接字符串106次再操作
思路就是用string来存字符 然后用flag标记符合条件的字符,然后我们遍历flag取出没有被标记的字符串,直到剩下一个字符为止
#include<bits/stdc++.h>
using namespace std;
int main()
{
int sum=19;
string str="abcdefghijklmnopqrs";
string temp="";
for(int i=0;i<106;i++)temp+=str;
str=temp;
while(sum!=1)
{
int flag[2014]={0};
for(int i=0;i<sum;i+=2)
{
flag[i]=1;
}
string ts="";
int cur=0;
for(int i=0;i<sum;i++)
{
if(flag[i]==0)
{
cur++;
ts+=str[i];
}
}
str=ts;
sum=cur;
}
cout<<str;
}
大衍数列
i%2==0
打印图形
f(a,rank-1,row,col+w/2);;
神奇算式
我们遍历四个数 然后判断是否符合条件
接着再依次判断三个乘法的位置,找出成功的个数
然后我们用set去重
#include<bits/stdc++.h>
using namespace std;
int ary[4]={0};
int ans=0;
map<pair<int,int>,int>mp;
int book[1000]={0};
//注意看题目要求 乘法交换律是一种情况
//所以要去重
int judge()
{
//0 1 2 3
//1 2 3 4
// * * *
//依次判断三种乘法情况
int cnt=0;
int A=0;
int B=0;
for(int i=1;i<=3;i++)
{
bool ok=true;
A=0;
B=0;
int flag[10]={0};
for(int j=0;j<i;j++)
{
A=A*10+ary[j];
flag[ary[j]]=1;
}
for(int k=i;k<=3;k++)
{
B=B*10+ary[k];
flag[ary[k]]=1;
}
int C=A*B;
if(C<1000||C>10000)ok=false;
while(C)
{
//ary中的数字只出现过一次且每个都出现
flag[C%10]--;
C/=10;
}
for(int i=0;i<10;i++)if(flag[i]<0)ok=false;
if(mp[make_pair(A,B)]==1)ok=false;
if(ok)
{
mp[make_pair(A,B)]=1;
mp[make_pair(B,A)]=1;
cnt++;
printf("%d*%d=%d\n",A,B,A*B);
}
}
return cnt;
}
void dfs(int cur)
{
if(cur==4)
{
ans+=judge();
return;
}
for(int i=0;i<10;i++)
{
if(cur==0&&i==0)continue;
ary[cur]=i;
dfs(cur+1);
}
}
int main()
{
dfs(0);
cout<<ans;
}
绳圈
这道题dp我不会。。先空着吧
分糖果
这道题有毒!!
这道题表述首先没说分一半是向上还是向下取整。然后有一个特别大的问题题目没有说明白
由于是循环分糖果,那么A将会得到上一个人给的糖果,此时A应该给下一个人A当前总共的糖果数,这个逻辑没问题吧??然而正确的做法是分给下一个人A的原始糖果数。我一直再用新的一半来模拟。写得我都怀疑人生了,这么简单的题目…吐血
下面循环从那开始不要紧 保证走完一圈就行了
#include<bits/stdc++.h>
using namespace std;
int N;
int ary[100];
bool check(int a[])
{
int s=a[0];
for(int i=0;i<N;i++)
{
if(a[i]!=s)return false;
}
return true;
}
int main()
{
cin>>N;
for(int i=0;i<N;i++)
{
cin>>ary[i];
}
int ans=0;
while(!check(ary))
{
int temp=0;
for(int i=0;i<N;i++)
{
if(i==0)
{
temp=ary[i]/2;
ary[i]-=ary[i]/2;
}
else
{
ary[i-1]+=ary[i]/2;
ary[i]-=ary[i]/2;
}
}
ary[N-1]+=temp;
for(int i=0;i<N;i++)
{
cout<<ary[i]<<" ";
}
cout<<endl;
for(int i=0;i<N;i++)
{
if(ary[i]%2!=0)
{
ary[i]++;
ans++;
}
}
}
cout<<ans;
}
地宫取宝
记忆搜索 不会QAQ
小朋友排队
逆序数 不会QAQ