之所以写这篇文章是为了帮助我个人记录一些东西,没有任何其他目的。其源程序仅供参考!
-
1
- 1000ms 内存限制:
- 65536kB
时间限制:
-
描述
- 计算a加b。 输入
-
一行,用空格分开的两个整数a和b。
其中0≤a, b≤10000。
输出
- 一个整数,为a加b的和。 样例输入
-
1 2
样例输出
-
3
参考样例:
#include<stdio.h>
- 1000ms 内存限制:
- 65536kB
void main()
{
int x,y,sum;
scanf("%d%d",&x,&y);
sum=x+y;
printf("%d/n",sum);
}
2
时间限制:
-
描述
- 计算a的b次方对9907取模的值。 输入
-
第一行有一个正整数T,表示有T组测试数据。
接下来T行,每行是一组测试数据,包含两个整数a和b。
其中T<=10000, 0 <=a,b < 2^31。
输出
- 有T行,依次输出每组数据的结果。 样例输入
-
3
1 2
2 3
3 4
样例输出
-
1
8
81
参考样例:
#include<stdio.h>
- 1000ms 内存限制:
- 65536kB
#include<stdlib.h>
long mod(long a,long b,int t);
void main()
{
int T,i;
long *x,*y,*z;
scanf("%d",&T);
x=(long *)malloc(T*sizeof(long));
y=(long *)malloc(T*sizeof(long));
z=(long *)malloc(T*sizeof(long));
for(i=0;i<T;i++)
scanf("%ld%ld",x+i,y+i);
for(i=0;i<T;i++)
{
*(z+i)=mod(*(x+i),*(y+i),T);
}
for(i=0;i<T;i++)
printf("%ld/n",*(z+i));
free(x);
free(y);
free(z);
}
long mod(long a,long b,int t)
{
int l[t],z=-1;
long y;
for(;b!=1;b>>=1)
{
z++;
if(b%2==0) l[z]=0;
else l[z]=1;
}
y=a*a%9907;
for(;z>0;z--)
{
if(l[z]) y=(y*a%9907)*(y*a%9907)%9907;
else y=y*y%9907;
}
if(l[0]) y=(y*a%9907);
return y;
}
3
时间限制:
-
描述
-
菲波那切数列可以用下列的式子表示:
f(1)=1
f(2)=1
f(n)=f(n-1)+f(n-2) (n>=3)
现在我们根据这个规则定义另一种数列 命名为"辛波那切数列", 它是这样定义的:
s(x)=0 (x<0)
s(x)=1 (0<=x<1)
s(x)=s(x-1)+s(x-3.14) (x>=1)
现在需要计算出s(x) MOD 1000000007的值。
输入
-
第一行有一个正整数T表示有T组测试数据。
接下来T行,每行包含一个数x。
其中 T<=10000, -1000.0<=x<=1000.0
输出
- 有T行,依次输出每组数据的结果。 样例输入
-
3
-1
0.667
3.15
样例输出
-
0
1
2
参考样例:
#include<stdio.h>
- 1000ms 内存限制:
- 65536kB
#include<stdlib.h>
const int C = 1500000;
int ans[3000000];
unsigned long lxy(long a);
void main()
{
int T,i;
long a;
unsigned long *z;
double *x;
scanf("%d",&T);
x=(double*)malloc(T*sizeof(double));
z=(unsigned long*)malloc(T*sizeof(unsigned long));
for(i=0;i<T;i++)
scanf("%lf",x+i);
for(i=0;i<T;i++)
{
a=(long)(*(x+i)*1000);
*(z+i)=lxy(a);
}
for(i=0;i<T;i++)
printf("%lu/n",*(z+i));
free(x);
free(z);
}
unsigned long lxy(long a)
{
unsigned long b;
if(a<0)return 0;
else if(a>=0&&a<1000)return 1;
else
{
if(ans[C+a]) return ans[C+a];
ans[C+a]=lxy(a-1000)+lxy(a-3140)%1000000007;
return ans[C+a];
}
}
4
时间限制:
-
描述
- 一个正整数,如果它能被7整除,或者它的十进制表示法中某个位数上的数字为7,则称其为与7相关的数.现求所有小于等于 n(n<100)的与7无关的正整数的平方和. 输入
- 输入为一行,正整数n,(n<100) 输出
- 输出小于等于n的与7无关的正整数的平方和 样例输入
-
21
样例输出
-
2336
参考样例:
#include<stdio.h>
-
在著名的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
参考样例:
#include<stdio.h>
- 1000ms 内存限制:
- 65536kB
#include<stdlib.h>
void main()
{
int n,i;
long a=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
if(i%7==0||i/10==7||i%10==7)continue;
else a+=i*i;
}
printf("%ld/n",a);
}
5
描述
#include<string.h>
#include<stdlib.h>
void main()
{
int nian=1970,yue=1,ri=1,shi,fen,miao,day,a,b,c;
int i=0;
int t,x;
unsigned long *sec;
while (scanf("%d",&x)!=EOF)
{
*(sec+i)=x;
i++;
}
t=i;
for(i=0;i<t;i++)
{
day=(int)(*(sec+i)/86400);
shi=(int)(*(sec+i)%86400/3600);
fen=(int)(*(sec+i)%86400%3600/60);
miao=(int)(*(sec+i)%86400%3600%60);
if(day>1461)
{
a=day/1461;
b=day%1461;
c=b/365;
ri=b%365;
nian+=a*4+c;
if(c==2)
{
if(ri>31)
{
ri-=31;yue=2;
if(ri>29)
{
ri-=29;yue=3;
if(ri>31)
{
ri-=31;yue=4;
if(ri>30)
{
ri-=30;yue=5;
if(ri>31)
{
ri-=31;yue=6;
if(ri>30)
{
ri-=30;yue=7;
if(ri>31)
{
ri-=31;yue=8;
if(ri>31)
{
ri-=31;yue=9;
if(ri>30)
{
ri-=30;yue=10;
if(ri>31)
{
ri-=31;yue=11;
if(ri>30)
{
ri-=30;yue=12;
}
}
}
}
}
}
}
}
}
}
}
}
else
{
if(ri>31)
{
ri-=31;yue=2;
if(ri>28)
{
ri-=28;yue=3;
if(ri>31)
{
ri-=31;yue=4;
if(ri>30)
{
ri-=30;yue=5;
if(ri>31)
{
ri-=31;yue=6;
if(ri>30)
{
ri-=30;yue=7;
if(ri>31)
{
ri-=31;yue=8;
if(ri>31)
{
ri-=31;yue=9;
if(ri>30)
{
ri-=30;yue=10;
if(ri>31)
{
ri-=31;yue=11;
if(ri>30)
{
ri-=30;yue=12;
}
}
}
}
}
}
}
}
}
}
}
else yue=1;
}
}
printf("%04d-%02d-%02d %02d:%02d:%02d/n",nian,yue,ri,shi,fen,miao);
}
}
6
时间限制:
-
描述
- 给定一个整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列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
参考样例:
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i,j,k,m,n,h,a,*b,c[50],t=0;
int **lie=NULL;
scanf("%d",&a);
b=(int*)malloc(a*sizeof(int));
lie=(int **)malloc(a*sizeof(int *));
for(i=0;i<a;i++)
{
scanf("%d",b+i);
lie[i]=(int *)malloc(*(b+i)*sizeof(int));
for(j=0;j<*(b+i);j++)
scanf("%d",&lie[i][j]);
}
for(i=0;i<a;i++)
{
h=0;
for(j=0;j<*(b+i);j++)
{ h=0;
for(k=0;k<*(b+i);k++)
{
for(m=k+1;m<*(b+i);m++)
{
if(j!=k&&j!=m)
{
if(lie[i][j]==lie[i][k]+lie[i][m])
{
c[h]=lie[i][k];
for(n=0;n<h;n++)
{
if(c[n]==lie[i][k]||c[n]==lie[i][m])
{t--;h--;}
}
h++;
t++;
}
}
}
}
}
printf("%d/n",t);
t=0;
}
for(i=0;i<a;i++)
{ free(lie[i]);lie[i]=NULL; }
free(lie);
lie= NULL;
free(b);
}