代码形式解题思路不唯一 仅供参考
A:A+BI
#include <stdio.h>
int a[36];
int main()
{
int n;
a[1] = 1 , a[2] = 1;
for(int i = 3 ; i <= 35 ; i ++)
{
a[i] = a[i-1] + a[i-2];
}
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",a[n]*2);
}
}
B:64的问题
只需判断最左边的1的右边有多少0,如果0的个数大于等于6即为Yes(注意需要判断是否全为零,例如:0000000)
#include <stdio.h>
#include <string.h>
char ch[1000000];
int main()
{
scanf("%s",ch);
int len = strlen(ch);
int flag = 0 , sum = 0;
for(int i = 0 ; i < len ; i++)
{
if(ch[i] == '1')
{
flag = 1;
}
if(flag && ch[i] == '0')
{
sum++;
}
}
if(flag&&sum>=6)
{
puts("Yes");
}
else
{
puts("No");
}
}
C: 字符串变换
模拟一下过程
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
int n, m, l, r;
char s[105], ll, rr;
scanf("%d%d", &n, &m);
cin >> s;
for (int i = 0; i < m; i ++) {
scanf("%d %d %c %c", &l, &r, &ll, &rr);
for (int i = l - 1; i <= r - 1; i ++) {
if (s[i] == ll) {
s[i] = rr;
}
}
}
cout << s << endl;
}
D:A+BII
题上a,b之和范围最大超过unsigned long long 上限 特判一下即
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
unsigned long long a,b;
scanf("%llu,%llu",&a,&b);
if(a == 9223372036854775807 && b == 9223372036854775809) printf("18446744073709551616\n");
else printf("%llu\n",a+b);
return 0;
}
E:三个人的象棋
每次判断当前步情况存在与否
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
int main()
{
int n,a[MAXN];
while(~scanf("%d",&n))
{
for(int i = 0; i < n; i++)
{
scanf("%d",&a[i]);
}
int p1 = 1, p2 = 2, flag = 1;
for(int i = 0; i < n; i++)
{
if(a[i] == p1) p2 = 6 - p1 - p2;
else if(a[i] == p2) p1 = 6 - p1 - p2;
else
{
flag = 0; break;
}
}
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}
F:越努力越幸运
660-669中如果幸运的话猜到667就是对的 一个一个试
#include <stdio.h>
int main()
{
printf("%d",1328170476%665);
}
G: ztt的问题
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);//n为奇数
//打印空心菱形上半个
for(int i=1;i<=n/2;i++)//行
{
for(int j=1;j<=(n-(i*2-1))/2;j++) printf("*");
for(int j=1;j<=i*2-1;j++)
{//控制空心
if(j==1||j==i*2-1) printf(" ");
else printf(" ");
}
for(int j=1;j<=(n-(i*2-1))/2;j++) printf("*");
printf("\n");
}
for(int i=1;i<=n;i++)
{//控制最中间
if(i==1||i==n) printf(" ");
else printf(" ");
}printf("\n");
//打印空心菱形下半个
for(int i=n/2;i>=1;i--)//行
{
for(int j=1;j<=(n-(i*2-1))/2;j++) printf("*");
for(int j=1;j<=i*2-1;j++)
{//控制空心
if(j==1||j==i*2-1) printf(" ");
else printf(" ");
}
for(int j=1;j<=(n-(i*2-1))/2;j++) printf("*");
printf("\n");
}
return 0;
}
H: 兔子
斐波那契数列 注意最后是兔子的只数不是对数
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
int n, a[MAXN], cnt[MAXN];
int main()
{
a[1] = a[2] = 1;
for(int i = 3; i <= 35; i++)
{
a[i] = a[i - 1] + a[i - 2];
}
//for(int i = 1; i <= 35; i++) printf("%d ",a[i]*2);
int n;
scanf("%d",&n);
printf("%d\n",a[n] * 2);
return 0;
}