A.私有笑声
这道题我的想法就是读取字符串后,去判断每个元素是否是'.',是就多输出"xixixixi.",否则就只输出其本身。
#include<stdio.h>
#include<string.h>
int main()
{
char a[1000001];
gets(a);
int l=strlen(a);
for(int i=0;i<l;i++)
{
printf("%c", a[i]);
if(a[i]=='.')
printf("xixixixi.");
}
return 0;
}
F.加一余二
这道题是需要用质因数分解的,如果n能整除j,则j++;不然的话就去用n/j,改变n的值,接着去分解新n。
#include<stdio.h>
int main()
{
int t;
scanf("%d", &t);
for(int i=0;i<t;i++)
{
int n;
scanf("%d", &n);
int k=1, c;
for(int j=2;j*j<=n;j++)
{
if(n%j)
continue;
c=0;
while(n%j==0)
{
c++;
n/=j;
}
k*=(c+1);
}
if(n>1)
k*=2;
printf("%d\n", k);
}
return 0;
}
G.相加余三
这道题一开始我把题目读错了,漏掉了一个关键信息:
“我们只能选择以下三种操作的其中一种一直操作下去”
有了这个信息后,这道题就比较简单了。
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
int a[n];
for(int i=0;i<n;i++)
{
scanf("%d", &a[i]);
a[i]%=3;
}
int c=0, maxc=-1;
for(int i=0;i+1<n;i+=2)
{
c+=(a[i]+a[i+1])%3;
}
maxc=max(maxc, c);
c=0;
for(int i=n-1;i-1>=0;i-=2)
{
c+=(a[i]+a[i-1])%3;
}
maxc=max(maxc, c);
c=0;
for(int o=0, p=n-1;o<p;o++, p--)
{
c+=(a[o]+a[p])%3;
}
maxc=max(maxc, c);
printf("%d", maxc);
return 0;
}
J.最后都是0
这道题我的想法就是每次都去找出这个数组各个位置上的最大值,然后减去它,重复此过程即可。
#include<stdio.h>
#include<math.h>
int main()
{
int n;
scanf("%d", &n);
int i=0;
for(;;i++)
{
int xn, xs, maxn=-1;
xn=n;
for(;;)
{
xs=xn%10;
if(xs>maxn)
maxn=xs;
xn=xn/10;
if(xn==0)
break;
}
n-=maxn;
if(n==0)
break;
}
printf("%d", i);
return 0;
}
L.加纳
这道题的话就是去看有几次n,即看了几次视频,然后再去看最后一次看视频的时候有没有完整的看完,如果没有,则判断这次有没有看到“加纳”。
#include<stdio.h>
int main()
{
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
int c=0;
c=k/n;
if(k%n>=m)
c++;
printf("%d", c);
return 0;
}