今晚网易的题目

woshishabi1984 2010-05-28 10:04:17
很简单,但是很损
--------------------------------------------------------
A:与7无关的数

时间限制: 1000ms 内存限制: 65536kB

描述
一个正整数,如果它能被7整除,或者它的十进制表示法中某个位数上的数字为7,则称其为与7相关的数.现求所有小于等于n(n<100)的与7无关的正整数的平方和.

输入
输入为一行,正整数n,(n<100)

输出
输出小于等于n的与7无关的正整数的平方和

样例输入
21
样例输出
2336

---------------------------------------------------
B:unix纪元

时间限制: 1000ms 内存限制: 65536kB

描述
在著名的unix系统中,使用了一种简洁高效的时间表示方法,即:
将1970年1月1日0点作为“unix纪元”的原点,从1970年1月1日开始经过的秒数存储为一个32位整数

请编写一个程序,帮助把一个unix时间辍,转换成形如"YYYY-mm-dd HH:ii:ss"的格式,其中的字母分别代表
YYYY 4 位数字完整表示的年份
mm 数字表示的月份,有前导零的 2 位数字
dd 月份中的第几天,有前导零的2位数字
HH 小时,24 小时格式,有前导零
ii 有前导零的分钟数
ss 秒数,有前导零

输入
输入数据有若干行,每行包含一个整数t,(0<=t<2^31)

输出
对每一行输入数据,输出一行,为形如“YYYY-mm-dd HH:ii:ss”格式的时间

样例输入
10
1234567890

样例输出
1970-01-01 00:00:10
2009-02-13 23:31:30

----------------------------------------------------------------------------------------
C:和数

时间限制: 1000ms 内存限制: 65536kB

描述
给定一个整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。

输入
第一行是一个整数T,表示一共有多少组数据。 1<= T <= 100
接下来的每组数据共两行,第一行是数列中数的个数n ( 1 <= n <= 100),第二行是由n个整数组成的数列。

输出
对于每组数据,输出一个整数(占一行),就是数列中等于其他两个数之和的数的个数。
样例输入
2
4
1 2 3 4
5
3 5 7 9 10
样例输出
2
1
...全文
624 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgycsmb 2010-06-07
  • 打赏
  • 举报
回复
接分。。
  • 打赏
  • 举报
回复
C的话。
我想的方法还是只有o(n^2)

[Quote=引用 9 楼 litaoye 的回复:]
嗯,C的话n*log(n)恐怕还是有些问题,似乎n^log(3)可以,再想想,没想到竟然从这道题中,找到了不少与大数乘法类似的问题。按照奇偶分组的方法类似FFT,而分治的的策略又有些像Karatsuba
[/Quote]
AAA20090987 2010-05-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 woshishabi1984 的回复:]
稍微唠叨几句。。
本人WA到死。。。不过这也正常。。。平时做题边边角角的就不大注意。。。竞赛。。。细微之处见功力。。高手之所以为高手。。。在细节方面。。。考虑到的比非高手要多的多。。。更何况别人的建模实力一般人难以企及。。。就当我胡言乱语几句好了。。。

A没说的。。直接打表过。。
B。。。我也是打表。。。没超时的问题。。。
C。。。就是这个C。。。WA到死。。。

注意一下C的这个……
[/Quote]

说得有理。
但这道题我没看答案之前,真的不知道这个题目要求什么,呵呵。
ithiker 2010-05-29
  • 打赏
  • 举报
回复
//1
#include<cstdio>
int IsRelateSeven(int n)
{
if((n % 7 == 0)||(n % 10 == 7) || (n / 10 == 7))
return 1;
else
return 0;
}
int main(void)
{
int n,i,sum = 0;
scanf("%d",&n);
for(i = 0;i <= n;i++)
{
if( 1 - IsRelateSeven(i))
sum += (i * i);
}
printf("%d\n",sum);

return 0;
}

//2
#include<cstdio>
int isLeapyear(int n)
{
return (n % 100 == 0 )? (n % 400 == 0) :(n % 4 == 0);
}
int main(void)
{
int leapYearSeconds = 366 * 24 * 60 * 60;
int nonleapYearSeconds = 365 * 24 * 60 * 60;
int year = 1970,month = 1,day,hour = 0,minute = 0,second = 0;
int n,i,k,flag,temp;
int dayOfmonth[2][12] ={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
scanf("%d",&n);

second = n % 60;
minute = n / 60 % 60;
hour = n / 60 / 60 % 24;

temp = n / nonleapYearSeconds;
year += temp;
k = (temp + 1) / 4;
temp = n - k * leapYearSeconds - (temp - k) * nonleapYearSeconds;

day = temp / (24 * 60 * 60) + 1;//day start from 1
flag = isLeapyear(year);
for(i = 0;i<=11;i++)
{
if(day > 0)
{
if(day - dayOfmonth[flag][i] > 0)
{
month += 1;
day -= dayOfmonth[flag][i];
}
}
}
printf("%d-%02d-%02d %02d:%02d:%02d\n",year,month,day,hour,minute,second);
return 0;
}
yu103 2010-05-29
  • 打赏
  • 举报
回复
题目还算好的,没有效率要求,期待正式比赛。
AAA20090987 2010-05-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 qcxhh 的回复:]
A直接打表吧,B貌似有库函数的说,C暴力吧,不过注意1 1 2 2 3输出是1,0 0 0 0输出是4
[/Quote]

问一下:B题用库函数怎么做?
AAA20090987 2010-05-29
  • 打赏
  • 举报
回复
唉,我更杯剧。。。
前两题只用了半小时(第一题水过,第二题以前做过类似的),第三题我DEBUG了差不多一个小时,还是WA。最后直接放弃。。。。。。。。。。。。。
感觉第三题题意不清,否则的话,直接暴力的话应该是没什么难度的。

今晚要被BS了,呵呵
看来我还是做一个ACM的业余爱好者算了
参赛,这个不太适合我,哈哈。
liuxiaobing2008 2010-05-29
  • 打赏
  • 举报
回复
学习一下
qq120848369 2010-05-29
  • 打赏
  • 举报
回复
支持楼上这种做法,编程之美上的一个思想,论坛上也出现过N次了.
#include <stdio.h>   
#include <stdlib.h>

typedef int Byte4;

int main()
{
bool isRYear(Byte4 year);
Byte4 min=60;
Byte4 hou=60*60;
Byte4 day=hou*24;
Byte4 mon28=28*day;
Byte4 mon29=29*day;
Byte4 mon30=30*day;
Byte4 mon31=31*day;
Byte4 rYear=mon31*7+mon30*4+mon29;
Byte4 pYear=mon31*7+mon30*4+mon28;
Byte4 rMon[13]={0,31*day,29*day,31*day,30*day,31*day,30*day,31*day,31*day,30*day,31*day,30*day,31*day}; //平年
Byte4 pMon[13]={0,31*day,28*day,31*day,30*day,31*day,30*day,31*day,31*day,30*day,31*day,30*day,31*day}; //闰年
Byte4 sec;
scanf("%u",&sec);
Byte4 year=1970;
Byte4 month,date,hour,minute,second;
while(true)
{
if(sec<rYear&&isRYear(year)||sec<pYear&&!isRYear(year))
{
break;
}
else
{
sec-=isRYear(year)? rYear:pYear;
++year;
}
}
month=1;
Byte4 *p=isRYear(year)? rMon:pMon;
while(true)
{
if(sec-p[month]<0)
{
break;
}
else
{
sec-=p[month];
++month;
}
}
date=sec/day+1;
sec=sec%day;
hour=sec/hou;
sec=sec%hou;
minute=sec/min;
sec=sec%min;
second=sec;
printf("%4d-%02d-%02d %02d:%02d:%02d",year,month,date,hour,minute,second);
}

bool isRYear(Byte4 year)
{
if(year%400==0||year%100!=0&&year%4==0)
{
return true;
}
else
{
return false;
}
}


这是我写的第二题,也不会什么优化,就这样- -.
fanster28_ 2010-05-29
  • 打赏
  • 举报
回复
其实稍微改一下就好了,复杂度还是O(n^2)


#include <stdio.h>
#include <algorithm>
using namespace std;

int main()
{
int t,n,a[100],i,j,k,c;
scanf("%d",&t);
while (t--)
{
scanf("%d",&n);
for (i=0;i<n;++i)
scanf("%d",a+i);
sort(a,a+n);
c=0;
for (i=0;i<n;++i)
{
for (j=0,k=n-1;j!=k;)
{
if (j==i)
j++;
else if (k==i)
k--;
else if (a[j]+a[k]>a[i])
k--;
else if (a[j]+a[k]<a[i])
j++;
else
break;
}
if (j!=k)
c++;
}
printf("%d\n",c);
}
return 0;
}

wing_0706 2010-05-29
  • 打赏
  • 举报
回复
mark.
genlic 2010-05-29
  • 打赏
  • 举报
回复
HAHA 有道难题。
fanster28_ 2010-05-29
  • 打赏
  • 举报
回复
那还是直接暴力吧
as1302001954 2010-05-29
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 fanster28_ 的回复:]
有0错在哪里?举例说明
[/Quote]
比如
5
0 0 0 0 0
结果应该是5
fanster28_ 2010-05-29
  • 打赏
  • 举报
回复
我发现了,连续相等的时候还有点bug
fanster28_ 2010-05-29
  • 打赏
  • 举报
回复
有0错在哪里?举例说明
as1302001954 2010-05-29
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 fanster28_ 的回复:]
我昨天没做,今天话20分钟随便写的,不保证一定AC
A题

C/C++ code

#include <stdio.h>

int main()
{
int n,i,sum;
while (scanf("%d",&n)!=EOF)
{
for (i=sum=0;i<=n;++i)
if (i%7!=0……
[/Quote]
C题中的数字可能有负数或0,你的代码不一定正确。如果全0的话,就错了
AAA20090987 2010-05-29
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 fanster28_ 的回复:]
B题我偷懒了:-)
[/Quote]

唉,原来B题这么简单,害我写得暴长。。。
fanster28_ 2010-05-29
  • 打赏
  • 举报
回复
B题我偷懒了:-)
fanster28_ 2010-05-29
  • 打赏
  • 举报
回复
我昨天没做,今天话20分钟随便写的,不保证一定AC
A题

#include <stdio.h>

int main()
{
int n,i,sum;
while (scanf("%d",&n)!=EOF)
{
for (i=sum=0;i<=n;++i)
if (i%7!=0&&i%10!=7&&i/10!=7)
sum+=i*i;
printf("%d\n",sum);
}
return 0;
}


B题

#include <stdio.h>
#include <time.h>

int main()
{
long long t;
struct tm *l;
while (scanf("%lld",&t)!=EOF)
{
l=gmtime((time_t*)&t);
printf("%04d-%02d-%02d %02d:%02d:%02d\n",l->tm_year+1900,l->tm_mon+1,l->tm_mday,l->tm_hour,l->tm_min,l->tm_sec);
}
}


C题,其实我觉得这个题目意思很明显,不应该有这么多奇异

#include <stdio.h>
#include <algorithm>
using namespace std;

int main()
{
int t,n,a[100],i,j,k,c;
scanf("%d",&t);
while (t--)
{
scanf("%d",&n);
for (i=0;i<n;++i)
scanf("%d",a+i);
sort(a,a+n);
c=0;
for (i=2;i<n;++i)
{
for (j=0,k=i-1;j!=k;)
{
if (a[j]+a[k]>a[i])
k--;
else if (a[j]+a[k]<a[i])
j++;
else
break;
}
if (j!=k)
c++;
}
printf("%d\n",c);
}
return 0;
}
加载更多回复(12)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧