1.淘气的蜡笔小鑫
蜡笔小鑫真是又闲又淘气,他看到走廊上的灯都是灭的,就跑过去捣乱。每个灯泡都有自己的开关,用来控制灯的状态(开或者关)。如果灯灭了,按一下开关即开灯,再按一次即关灯。假设走廊里有n个灯泡,蜡笔小鑫就沿着走廊来回走n次。每次都是沿走廊走下去然后再回来,并且当他在走第i次时,都会按一下所有位置可被i整除的灯的开关(每次他都只在去的时候按下开关,回来的时候未进行任何操作),例如:n=8,i=3时,他在走第3次的时候按下了序号为3和6的灯的开关。他想知道最后一个灯泡的最终状态到底是开还是关,你能帮帮他吗?
Input输入包含一个正整数n(n≤232-1),表示蜡笔小鑫沿着走廊来回走了n次。
Output输出单行结果,如果最后一个灯泡是开的,输出“yes”,否则,输出“no”。
Sample Input
3
6241
8191
Sample Output
no
yes
no
#include <stdio.h>
#include <string.h>
int main()
{
int n,a[10000],i,j;
while(~scanf("%d",&n))
{
memset(a,0,sizeof(a));
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
if(i%j==0)
{
if(a[i]==0)
a[i]=1;
else
a[i]=0;
}
}
if(a[n]==1)
printf("yes\n");
else
printf("no\n");
}
return 0;
}
(暴力肯定时间超限,下面是简单做法,直接判断因子个数)
#include<stdio.h>
#include <math.h>
int main()
{
int n,i,k;
while(~scanf("%d",&n))
{
int ans=0;
k=sqrt(n);
for(i=1;i<k;i++)
if(n%i==0)
ans+=2;
if(k*k==n)
ans++;
if(ans%2==0)
printf("no\n");
else
printf("yes\n");
}
return 0;
}
2.
今天是星期三,是本周的第三天,明天是2015年的最后一天。在2016年,小壮打算买些水晶玫瑰花送给他的女朋友!他设计了两种购买方案。第一种方案是在每周固定的某天购买一枝水晶玫瑰,第二种方案是在每月固定的某天购买一枝。他只可选择其中一种方案。小壮想知道他在2016年总共能买多少枝水晶玫瑰,小壮笨笨的,你能帮帮他吗?
Input
输入只可能有两种格式:
(1)"x of week" ,(1 ≤ x ≤ 7),即在每周的第X天购买一枝水晶玫瑰花。
(2)"x of month" ,(1 ≤ x ≤ 31),即在每月的第X天购买一枝水晶玫瑰花。
Output
输出单行,表示小壮在2016年所购买的水晶玫瑰的总数。
Sample Input
4 of week
30 of month
Sample Output
52
11
是否是闰年的判断方法(year%4==0&&year%100!=0||year%400==0)
所以2016是闰年,2月29天,平年2月28天
#include <stdio.h>
int main()
{
int a[14]={0,31,29,31,30,31,30,31,31,30,31,30,31},i,n,sum=0;
char s[10];
while(~scanf("%d",&n))
{
sum=0;
getchar();
gets(s);
if(s[3]=='w')
{
if(n==5||n==6)(2016年第一天是星期5,366%7=2)
sum=53;
else
sum=52;
}
if(s[3]=='m')
{
for(i=1;i<=12;i++)
if(n<=a[i])
sum++;
}
printf("%d\n",sum);
}
return 0;
}
3.小茜的减肥之路
今天,多年未见的小钧和小江在街头偶遇,小江想看看当年那个蠢蠢的小钧有没有变聪明一些,他灵机一动,说:“当初小茜立了个flag,说一定要减肥,她想着第一天跑一米,第二天跑两米,第三天跑三米……第n天跑n米。我问你,小茜一共跑了多少米。”小钧左思右想,就是想不出来,他心底暗骂小茜,没事立什么flag!但是他并不想让小江看扁,所以想请你偷偷地帮忙算一下小茜这n天一共跑了多少米,小钧傻傻的,你能帮帮他吗?
Input
输入一个整数n(n<109),表示跑了n天。
Output
输出单行结果,表示总共跑了多少米。
Sample Input
6
Sample Output
21
正常写肯定时间超限,用求和公式
#include<stdio.h>
int main()
{
long long int n,s;
scanf("%lld",&n);
s=n*(n+1)/2;
printf("%lld\n",s);
return 0;
}
4.(水题)
抗战时期,小飞作为特工,成功打入了敌方内部,为我方提供了许多关键性的情报。为了防止电报被截而泄露机密,小飞和他的联系人小珲制定了一个密码本,内容如下:电报中的0实际上是2,1实际就是1,2实际是1/2,4实际是1/4,8实际是1/8,16实际是1/16。小飞的联系人小珲,专门负责翻译他的电报,并计算翻译过后的实际数字的加和,便能懂得小飞想传达的信息。可今天小珲比较忙,你作为他的助理,哈哈~那就请你按照规定进行求和叭~你能帮帮他吗?
Input
第一行输入一个数字N(1≤N≤2000),表示电报中数字的数量;
第二行输入N个数字,表示电报中的数字;
Output输出单行结果,即按规定计算出的加和(保留四位小数)。
Sample Input
10
1 2 2 2 1 4 4 8 8 16
Sample Output
4.3125
#include <stdio.h>
int main()
{
int i,n,a[100000];
double s=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]==0)
s+=2;
else
if(a[i]==2||a[i]==4||a[i]==8||a[i]==16)
s+=(double)1/a[i];
else
s+=a[i];
}
printf("%.4lf\n",s);
return 0;
}
5.
有人送了苗苗一个小火车的玩具,小火车由n个车厢组成,按顺序从1到n编号(所有车辆的编号都是不同的)。有天,她一不小心,哎呀!把小火车的车厢顺序都给搞乱了,这可怎么办呀!她只希望能够按照编号从小到大的顺序重新排列,可是她每次只能将其中两节车厢的位置互相交换,这绕来绕去的可把她给绕晕了啊。她实在是太懒了,只想尽可能少的移动车厢。苗苗想知道最少的移动次数,你能帮帮她吗?
Input
第一行为一个正整数n(n<1000),表示有n节车厢。
第二行为n个正整数,用空格分开,表示目前车厢序号的排列情况。
Output
输出单行结果,表示至少交换多少次,才能完成排序。
Sample Input
5
3 1 2 5 4
Sample Output
3
(直接i跟i+1后面的最小交换)
#include <stdio.h>
int a[10000];
int YANG(int j,int n)
{
int min=1000,i,c;
for(i=j;i<n;i++)
if(a[i]<min)
{
min=a[i];
c=i;
}
return c;
}
int main()
{
int n,i,s=0,j,t;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
int c=YANG(j,n);
if(a[i]>a[c])
{
t=a[i];
a[i]=a[c];
a[c]=t;
s++;
}
}
printf("%d",s);
return 0;
}
6.
Marjar Cola上市啦!!!为了吸引更多的顾客,吃货公司的老板小茜决定推出一项活动:集齐x个空瓶或y个瓶盖,即可召唤神龙,免费获得一瓶完整的Marjar Cola!!!WoW~哇哦!!!!
而现在呢,小斯最初有a个空的可乐瓶和b个可乐瓶盖,他想尽可能多喝可乐(喝穷他!)。他想知道自己可以喝到几瓶Marjar Cola,你能帮帮他吗?
请注意:小斯只去吃货公司买可乐,一瓶可乐也只包含一个可乐瓶和一个瓶盖。并且小斯最初的可乐瓶和可乐盖都是别人给的,不算自己喝的。
Input
输入包括4个数,x,y,a,b(1 ≤ x, y, a, b ≤ 100)。
Output
输出单行结果,小斯可以喝到几瓶可乐,若为无数瓶,则输出“INF”。
Sample Input
1 3 1 1
4 3 6 4
Sample Output
INF
4
#include <stdio.h>
int main()
{
int x,y,a,b,i;
while(~scanf("%d%d%d%d",&x,&y,&a,&b))
{
if(x==1||y==1)
{
printf("INF\n");
continue;
}
int s=0;i=0;
while(1)
{
if(a>=x)
{
s+=a/x;
b+=a/x;
a=a%x+a/x;
}
if(b>=y)
{
s+=b/y;
a+=b/y;
b=b/y+b%y;
}
if(a<x&&b<y)
break;
i++;
if(i>1000)
break;
}
if(i>=1000)
printf("INF\n");
else
printf("%d\n",s);
}
return 0;
}
7.
大家都知道实验室里小莉,小晨和小芹是非常非常要好的朋友,但是最近呢,这三个人感觉真的是太无聊太无聊太无聊了!有天,小莉突发奇想,想来测试一下她们仨的默契程度。她们三个人每人都自己找了一个矩形的木板,看这三个木板能不能拼成一个正方形。如果能,那就代表着她们真是的很有很有默契的咯~如果不能,或许就没有那么有默契辣。这可把小莉愁坏了啊,她们到底有没有默契呀?你能帮帮她吗?
Input
输入包括三行,第一行代表第一个矩形的长h(h<1000)和宽w(w<1000),第二行代表第二个矩形的长h(h<1000)和宽w(w<1000),第三行代表第三个矩形的长h(h<1000)和宽w(w<1000)。
Output
输出单行结果,如果有默契请输出“YES”,否则输出“NO”,输出没有双引号。
Sample Input
8 2
1 6
7 6
Sample Output
YES
总是不对 找到后台 问题出在了7 5 7 5 10 3上,后台没有2 2 2 2 2 2这组数据
思路:先对结构体进行排序,最大的在第一列,而且按从大到小排,判断最后两组数据有没有相加等于最大的数,而且剩下的两个数是不是相等,且与第二个数据相加是不是等于第一个数。
注意:判断三个数是否想等,不能用2个连等号。
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
struct XY
{
int x,y;
}s[3];
bool cmp(struct XY a,struct XY b)
{
return a.x>b.x;
}
int main()
{
int i,t,z=0;
for(i=0;i<3;i++)
{
scanf("%d%d",&s[i].x,&s[i].y);
if(s[i].x<s[i].y)
{
t=s[i].x;
s[i].x=s[i].y;
s[i].y=t;
}
}
if(s[0].x==s[1].x&&s[1].x==s[2].x&&s[0].y==s[1].y&&s[1].y==s[2].y&&s[0].x!=s[0].y)
printf("YES\n");
sort(s,s+3,cmp);
if(s[1].x+s[2].x==s[0].x)
{
if(s[1].y==s[2].y&&s[1].y+s[0].y==s[0].x)
z++;
}
if(s[1].x+s[2].y==s[0].x)
{
if(s[2].x==s[1].y&&s[1].y+s[0].y==s[0].x)
z++;
}
if(s[2].y+s[1].y==s[0].x)
{
if(s[1].x==s[2].x&&s[1].x+s[0].y==s[0].x)
z++;
}
if(s[1].y+s[2].x==s[0].x)
{
if(s[1].x==s[2].y&&s[1].x+s[0].y==s[0].x)
z++;
}
if(z>0)
printf("YES\n");
else
printf("NO\n");
return 0;
}