A 本题为今年西南民大校赛的一道签到题
只需逐行循环读入字符串,并统计“:w”的个数即可,注意程序有空格间断,所以使用gets读入
代码:
#include<stdio.h>
#include<string.h>
#define maxn 100000
int main(void)
{
char s[maxn];
int sum=0;
while(gets(s))
{
int len=strlen(s);
int i;
for(i=0;i<len-1;i++)
{
if(s[i]==':'&&s[i+1]=='w')
{
sum++;
}
}
}
printf("%d\n",sum);
return 0;
}
B
本题为今年图灵杯的一道简单数学题
原式可化为N+1=(a+1)*(b+1)
可知若N+1为合数,则上式必然成立。N+1为素数,则无满足条件的a与b
所以只要写一个谓词判断N+1是否为素数即可。
代码
#include<stdio.h>
#include<math.h>
int main(void)
{
int flag=0;
long long n;
int a;
scanf("%lld",&n);
for(a=2;a<=sqrt(n+1);a++)
{
if((n+1)%a==0)
{
flag=1;
break;
}
}
if(flag)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
return 0;
}
C
本题为牛客跨年赛的一道整活题
容易发现,只需要找出了⌊ u[i] / q[i] ⌋的最小值即可
由于c语言本身自动类型转换的特性,所以只要循环遍历一遍,直接用max与u[i]/q[i]比较,其结果会自动进行floor操作。
代码:
#include<stdio.h>
typedef long long ll;
ll q[100100];
ll u[100100];
int main(void)
{
ll T;
scanf("%lld",&T);
while(T--)
{
int n;
scanf("%d",&n);
int i;
for(i=0;i<n;i++)
{
scanf("%lld",&q[i]);
}
for(i=0;i<n;i++)
{
scanf("%lld",&u[i]);
}
ll max=1e18;
for(i=0;i<n;i++)
{
if(max>(u[i]/q[i]))
{
max=(u[i]/q[i]);
}
}
printf("%lld\n",max);
}
return 0;
}
D 该题同样为西南民大校赛签到题
用函数进行非记忆化递归会超时,可以用数组递推
代码:
#include<stdio.h>
const int mod=1000000007;
long long int func[10000100];
int main(void)
{
int x;
scanf("%d",&x);
int i;
func[0]=0;
func[1]=1;
func[2]=2;
func[3]=3;
for(i=4;i<=x;i++)
{
func[i]=(func[i-1]+func[i-3])%mod;
}
printf("%lld\n",func[x]);
return 0;
}