主题:[原创][讨论][交流]编程高手的超级训练题解析
vcacm
[专家分:1500] 发布于 2007-04-11 17:29:00
[code]
[[color=FF0000]注意: 这儿绝大部分的题目来源于信息学竞赛!
这些题目都是非常好的!如果大家能把这些题目做出来,那么可以说你
的编程能力达到了一定的水平!
关于这些题目的答案在GOOGLE/BAIDU上都能搜出来,但我:希望大家积极参 与讨论, 如果你把当中的题目做出来了可以贴出来,不过最好是要讲清自己的解题思路!
我也会把自己做出来了的题目以及解题思路发上来和大家一起交流!
如果你想学好编程,那么实践是很重要的!
我也是一个编程爱好者![/color]
[color=FF00FF] My dream is to
develop a better than Linux, Windows more popular than the OS! [/color]
有啥问题,可以联系本人: 见我的签名档!
]
第二届全国青少年信息学(计算机)奥林匹克分区联赛复赛试题
(高中组 竞赛用时:3小时)
[color=FF00FF] 编号为: gcc_1[/color]
[/code]
[quote]
1.比赛安排(20分)
设有有2 n(n<=6)个球队进行单循环比赛,计划在2 n ? 1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2 n ? 1天内每个队都与不同的对手比赛。
例如n=2时的比赛安排:
队 1 2 3 4
比赛 1==2 3==4 一天
1==3 2==4 二天
1==4 2==3 三天
2.数制转换(20分)
设有一个字符串A$的结构为: A$=’m<n>p’
其中m为数字串(长度<=20),而n,p均为1或2位的数字串(其中所表达的内容在2-10之间)。
程序要求:从键盘上读入A$后(不用正确性检查),将A$中的数字串m(n进制),以p进制的形式输出。
例如:A$=’48<10>8’
其意义为:将10进制数48,转换成8进制数输出。
输出结果为:48<10>=60<8>
3.挖地雷(30分)
在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径。
V1 V 2 V3 V4 V5
例如:
[题目要求]
当地窖及其连接的数据给出之后,某人可以从任一处开始挖地雷,然后可以沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束。设计一个挖地雷的方案,使某人能挖到最多的地雷。
输入格式: N: (表示地窖的个数)
W1,W2,W3,……WN (表示每个地窖中埋藏的地雷数量)
A12…………… . A1N
A23…………..A2N
……..
AN-1 N
输出格式:
K1--K2--……….KV (挖地雷的顺序)
MAX (挖地雷的数量)
例如:
⑩--------⑧ ④-----⑦-------⑥
其输入格式为: 输出:
5 1 ?3 -4 -5
10,8,4,7,6 max=27
1 1 1 0
0 0 0
1 1
1
4.砝码称重(30分)
设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000),
要求:
输入方式:a1 a2 a3 a4 a5 a6
(表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个)
输出方式:Total=N
(N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况)
如输入:1_1_0_0_0_0 (注:下划线表示空格)
输出:TOTAL=3 表示可以称出1g,2g,3g三种不同的重量。
[/quote]
最后更新于:2007-04-17 06:46:00
回复列表 (共83个回复)
11 楼
vcacm [专家分:1500] 发布于 2007-04-11 21:08:00
[color=FF00FF]GCC-20 部分答案: 供大家参考![/color]
[code]
==========NO.1津津的储蓄计划=========
#include <stdio.h>
int main()
{
int i,j,k;
int m[20];
int yu=0,num=0;
for(i=1;i<=12;i++)
scanf("%d",&m[i]);
k=1;
while ( k<=12 )
{
if(yu+300<m[k])
{
j = k;
break;
}
yu+= 300 - m[k];
if(yu>=100)
{
num+=yu/100;
yu = yu%100;
}
k++;
}
if(k<=12)
printf("-%d",j);
else
printf("%d\n",num*120+yu);
return 0;
}
===========NO.2 合并果子=========
#include <stdio.h>
#include <time.h>
#define MAX 10001
void quick_sort ( long *a, long left, long right)
{
long i,j,m,mid,tm;
i = left;
j = right + 1;
mid = (left+right)/2;
m = a[mid];
a[mid] = a[left];
a[left] = m ;
if ( left < right)
{
while (1)
{
do
{
i++;
}while (a[i] <= m && i <right);
do
{
j--;
}while (a[j] >= m && j >left );
if (i >= j)
break;
tm = a[i] ;
a[i] = a[j] ;
a[j] = tm ;
};
a[left] = a[j];
a[j] = m ;
if ( left < j-1)
quick_sort ( a ,left , j-1);
if ( j+1 < right)
quick_sort ( a ,j+1, right );
}
}
long two_search (long *a, long pm , long nm , long n)
{
long l , r, mid;
l = nm ;
r = n ;
if(nm == n )
{
if(pm <= a[n])
return pm-1;
else
return n;
}
while (l <= r)
{
mid = (l+r)/2;
if ( (a[mid] < pm && pm < a[mid+1])
||(a[mid] == pm)
|| ( mid == n) )
return mid;
if (a[mid] < pm )
l = mid + 1;
else
r = mid - 1;
}
return 0;
}
int main (int argc , char * argv)
{
long h,k,b,min=0,temp;
long n,a[MAX],num;
scanf ( "%ld" , &n );
for( h = 0; h < n; h ++)
scanf( "%ld" , &a[h]);
quick_sort( a , 0 , n-1);
temp = a[0]+a[1];
min += temp;
for ( b = 2; b < n ; b ++)
{
num = two_search (a, temp , b , n-1);
for (k = b ; k <= num ; k ++)
a[k-1] = a[k];
a[num] = temp;
temp = a[b-1] + a[b];
min += temp;
}
printf("%ld\n",min);
return 0;
}
[/code]
12 楼
vcacm [专家分:1500] 发布于 2007-04-11 21:10:00
[code]
===========NO.3合唱队形=========
#include<stdio.h>
#include<stdlib.h>
int main()
{
int N,a[200],b[200],c[200];
int i,j,k,m,max=1;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
scanf("%d",&N);
for(i=1;i<=N;i++)
scanf("%d",&a[i]);
for(i=1;i<=N;i++)
{
for(b[i]=1,j=1;j<i;j++)
if(a[j]<a[i]&&b[j]+1>b[i])
b[i]=b[j]+1;
}
for(k=N;k>=1;k--)
{
for(c[k]=1,m=k+1;m<=N;m++)
if(a[m]<a[k]&&c[m]+1>c[k])
c[k]=c[m]+1;
}
for(i=1;i<=N;i++)
if(b[i]+c[i]>max)
max=b[i]+c[i];
printf("%d",N-max+1);
return 0;
}
[/code]
13 楼
vcacm [专家分:1500] 发布于 2007-04-11 21:26:00
[color=FF00FF]GCC-24 :去年的NOIP2006 的题目![/color]
[code]
==========NO.1能量项链==========
#include <stdio.h>
#define MAX 250
int main()
{
long max=0,i,j,k,r,save;
long n,a[MAX],m[MAX][MAX];
scanf("%ld",&n);
for(i=1 ; i<= n; i ++)
scanf("%d",&a[i]);
for(i=1,j=n+1; j<=2*n ; i++,j++)
a[j] = a[i];
memset(m,0,sizeof(m));
for (k = 2; k <= n; k++)
{
for( i = 1; i <= 2*n-k;i ++)
{
j = i+k-1;
//m[i][j] = m[i][i]+ m[i+1][j] +a[i]*a[i+1]*a[j];
max=0;
for(r = i;r < j; r++)
{
save = m[i][r]+m[r+1][j]+a[i]*a[r+1]*a[j+1];
if(save>max)
max = save;
}
m[i][j] = max;
}
}
max=0;
for(i=1,j=n;i<=n;i++,j++)
if(m[i][j] > max)
max = m[i][j];
printf("%ld",max);
return 0;
}
///////////////////////////////////////////
NO.1(<0.04s):
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#include<time.h>
#define MAX 200
int main()
{
clock_t begin,end;
FILE *in,*out;
long m[MAX][MAX],mar[MAX];
long E,i,j,k,l,n,max;
memset(m,0,sizeof(m));
begin=clock();
in=fopen("D:\\energy10.in","r");
fscanf(in,"%ld",&n);
for(i=0;i<n;i++)
fscanf(in,"%ld",&mar[i]);
fclose(in);
//scanf("%ld",&mar[i]);
for(k=1;k<n;k++)
for(i=0;i<n;i++)
{
j=i+k;
max=0;
for(l=i;l<j;l++)
{
max=m[i][l%n]+m[(l+1)%n][j%n]+mar[i]*mar[(l+1)%n]*mar[(j+1)%n];
if(max>m[i][j%n])
m[i][j%n]=max;
}
}
E=m[0][n-1];
for(i=1,j=0;i<n;i++,j++)
if(m[i][j]>E)
E=m[i][j];
out=fopen("D:\\energy10.result","w");
fprintf(out,"%ld",E);
fclose(out);
end=clock();
printf("run %f seconds!",(double)(end-begin)/CLOCKS_PER_SEC);
return 0;
}
///////////////////////////////////////////////
NO.2(<0.03s):
#include<stdio.h>
#include<memory.h>
#include<stdlib.h>
#include<time.h>
#define MAX 200
int main()
{
FILE *in,*out;
clock_t begin,end;
long m[2*MAX][2*MAX],mar[2*MAX];
long i,j,k,h,n,max,E=0;
begin=clock();
in=fopen("D:\\energy10.in","r");
fscanf(in,"%ld",&n);
for(i=1;i<=n;i++)
fscanf(in,"%ld",&mar[i]);
fclose(in);
for(i=n+1,j=1;i<=2*n;i++,j++)
mar[i]=mar[j];
for(k=2;k<=n;k++)
for(i=1;i<=2*n-k;i++)
{
j=i+k-1;
m[i][j]=m[i+1][j]+mar[i]*mar[i+1]*mar[j+1];
max=0;
for(h=i+1;h<j;h++)
{
max=m[i][h]+m[h+1][j]+mar[i]*mar[h+1]*mar[j+1];
if(max>m[i][j])
m[i][j]=max;
}
}
out=fopen("D:\\energy10.out","w");
for(i=1,j=n;i<=n;i++,j++)
if(m[i][j]>E)
E=m[i][j];
fprintf(out,"%ld",E);
fclose(out);
end=clock();
printf("\nRUN %f seconds !",(double)(end-begin)/CLOCKS_PER_SEC);
return 0;
}
////////////////////////////////////////////////////////////////////
[/code]
14 楼
vcacm [专家分:1500] 发布于 2007-04-11 21:27:00
[code]
==========NO.2金明的预算方案=========
/* * * ============================================ * * *
* * *
金明的预算方案 -------NOIP 2006 第2题
wv[i][j] = max {wv[i-1][j]), (if end false )
wv[i-1][j- v[i][0]]+ v[i][0]*w[i][0] (j >= v[i]),//0 个附件
wv[i-1][j-v[i][0]-v[i][1]] +v[i][0]*w[i][0]+v[i][0]*w[i][1]
(j>= v[i][0]+v[i][1])//1 个附件
wv[i-1][j-v[i][0]-v[i][1]-v[i][2]] + v[i][0] * w[i][0] + v[i][1]* w[i][1]
+ v[i][2] * w[i][2] (j >= v[i][0]+v[i][1]+v[i][2]) // 2 个附件
* * * ============================================ * * */
#include <stdio.h>
#define MAX_N 3201
#define MAX_M 101
int main(int argc, char **argv)
{
long wv[MAX_M][MAX_N];
long v[MAX_M][3], w[MAX_M][3];
long flag[MAX_M];
long m, va ,pa,q , N ;
long i,j,k,h;
memset(flag , 0, sizeof(flag) );
memset(wv, 0 , sizeof(wv) );
scanf("%ld %ld",&N , &m);
i = 0;
for(h=1 ; h<= m ; h++)
{
scanf("%ld %ld %ld",&va,&pa, &q);
if( q > 0 )
{
v[q][++flag[q]] = va / 10 ;
w[q][flag[q]] = pa ;
}
else
{
v[++i][0] = va / 10;
w[i][0] = pa ;
}
}
for(i = 1 ; i<= m ; i++)
{
wv[i][j] = wv[i-1][j];
if(flag[i]> 0)
continue ;
for(j = 1 ; j<= N ; j++)
{
k = 0;
wv[i][j] = wv[i-1][j];
if(wv[i][j] < (k=wv[i-1][j-v[i][0]]+ w[i][0] * v[i][0]) && j >= v[i][0])
wv[i][j] = k ;
if( flag[i] > 0) /*have sub thing*/
{
if(wv[i][j] < (k=wv[i-1][j-v[i][0]-v[i][1]]
+ w[i][0]*v[i][0] + w[i][1]*v[i][1]) && j>= v[i][0]+v[i][1])
wv[i][j] = k ;
if( flag[i] > 1)
{
if(wv[i][j] < (k=wv[i-1][j-v[i][0]-v[i][2]]
+ w[i][0]*v[i][0] + w[i][2]*v[i][2]) && j>= v[i][0]+v[i][2])
wv[i][j] = k ;
if(wv[i][j] < (k=wv[i-1][j-v[i][0]-v[i][1]-v[i][2]]
+w[i][0]*v[i][0]+w[i][1]*v[i][1]+w[i][2]*v[i][2])
&& j >= v[i][0]+v[i][1]+v[i][2] )
wv[i][j] = k ;
}
}
}
}
printf("%ld\n",wv[m][N]*10);
return 0;
}
[/code]
15 楼
vcacm [专家分:1500] 发布于 2007-04-11 21:28:00
同上:
[code]
////////////////////////////////////////////////////////////
#include <assert.h> (网上COPY)
#include <stdio.h>
typedef struct object_t {
int price;
int weight;
int sub;
int sub_price[2];
int sub_weight[2];
int total;
} OBJECT;
int p = 0;
int g_N;
int f[60][3201];
struct object_t objs[60];
int main(int argc, char *argv[])
{
FILE *fin, *fout;
int i, j, k, l, m, n; /* m also used as max */
int index[60];
fin = fopen("budget.in", "r");
assert(fin != NULL);
fscanf(fin, "%d", &g_N);
g_N /= 10;
fscanf(fin, "%d", &m);
for (i = 0; i < m; i++) {
fscanf(fin, "%d %d %d", &j, &k, &l);
if (l == 0) { /* main object */
objs[p].price = j / 10;
objs[p].weight = j / 10 * k;
objs[p].sub = 0;
objs[p].sub_price[0] = objs[p].sub_price[1] = 0;
objs[p].sub_weight[0] = objs[p].sub_weight[1] = 0;
objs[p].total = j / 10;
index[i] = p;
p++;
}
else {
l--;
objs[index[l]].sub_price[objs[index[l]].sub] = j / 10;
objs[index[l]].sub_weight[objs[index[l]].sub] = j / 10 * k;
objs[index[l]].total += j / 10;
objs[index[l]].sub++;
}
}
for (i = 0; i < p; i++) objs[p].sub = 2;
fclose(fin);
for (i = 0; i <= g_N; i++) {
if (i >= objs[0].total) {
m = objs[0].weight;
if (objs[0].sub >= 1) m += objs[0].sub_weight[0];
if (objs[0].sub == 2) m += objs[0].sub_weight[1];
for (j = i; j <= g_N; j++) {
f[0][j] = m;
}
break;
}
if (i < objs[0].price) {
f[0][i] = 0;
continue;
}
m = 0;
for (j = 0; j <= 3; j++) {
k = objs[0].sub_weight[0] * (j >> 1) +
objs[0].sub_weight[1] * (j & 1);
if ((k > m) && (objs[0].sub_price[0] * (j >> 1)
+ objs[0].sub_price[1] * (j & 1) + objs[0].price <= i)) {
m = k;
}
}
f[0][i] = objs[0].weight + m;
}
for (l = 1; l < p; l++) {
for (i = 0; i <= g_N; i++) {
m = f[l - 1][i];
for (j = 0; j <= 3; j++) {
n = objs[l].sub_price[0] * (j >> 1)
+objs[l].sub_price[1] * (j & 1) + objs[l].price;
if (n > i) continue;
k = objs[l].sub_weight[0] * (j >> 1)
+ objs[l].sub_weight[1] * (j & 1) + objs[l].weight + f[l - 1][i - n];
if (k > m) m = k;
}
f[l][i] = m;
}
}
fout = fopen("budget.out", "w");
fprintf(fout, "%d\n", f[p - 1][g_N] * 10);
fclose(fout);
return 0;
}
[/code]
16 楼
vcacm [专家分:1500] 发布于 2007-04-11 21:29:00
[code]
============NO.3 作业调度方案==========
#include <assert.h> (网上COPY)
#include <stdio.h>
#include <limits.h>
#include <malloc.h>
typedef struct timegap_t {
int start, end;
struct timegap_t * next;
} TIMEGAP;
struct timegap_t * mtime[20];
int last[20];
int proc[20][20][2]; /* (machine, time) */
int curr[20]; /* current proc */
int seq[400];
int m, n;
int main(int argc, char *argv[])
{
FILE *fin, *fout;
int i, j;
struct timegap_t *p, *tmp;
fin = fopen("jsp.in", "r");
fscanf(fin, "%d %d", &m, &n);
for (i = 0; i < m * n; i++) {
fscanf(fin, "%d", &seq[i]);
seq[i]--;
}
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
fscanf(fin, "%d", &proc[i][j][0]);
proc[i][j][0]--;
}
}
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
fscanf(fin, "%d", &proc[i][j][1]);
}
}
fclose(fin);
/* initialize */
for (i = 0; i < m; i++) {
mtime[i] = malloc(sizeof(struct timegap_t));
mtime[i]->start = 0;
mtime[i]->end = INT_MAX;
mtime[i]->next = NULL;
}
for (i = 0; i < n; i++) {
curr[i] = 0;
last[i] = 0;
}
/* simulate */
for (i = 0; i < m * n; i++) {
/* current obj = seq[i] */
/* current proc = curr[seq[i]] */
/* machine = proc[seq[i]][curr[seq[i]]][0] */
/* time = proc[seq[i]][curr[seq[i]]][1] */
/* find the 1st suitable time gap */
p = mtime[proc[seq[i]][curr[seq[i]]][0]];
do {
if (p->start == p->end) {
p = p->next;
continue;
}
if (p->start >= last[seq[i]] && p->end - p->start >= proc[seq[i]][curr[seq[i]]][1]) {
break;
}
if (p->start < last[seq[i]] && p->end - last[seq[i]] >= proc[seq[i]][curr[seq[i]]][1]) {
break;
}
p = p->next;
} while (p != NULL);
assert (p != NULL);
/* separate the time gap */
if (p->start >= last[seq[i]]) {
p->start += proc[seq[i]][curr[seq[i]]][1];
last[seq[i]] = p->start;
curr[seq[i]]++;
}
if (p->start < last[seq[i]]) {
tmp = malloc(sizeof(struct timegap_t));
tmp->start = last[seq[i]] + proc[seq[i]][curr[seq[i]]][1];
tmp->end = p->end;
tmp->next = p->next;
p->next = tmp;
p->end = last[seq[i]];
last[seq[i]] += proc[seq[i]][curr[seq[i]]][1];
curr[seq[i]]++;
}
}
j = 0;
for (i = 0; i < n; i++) {
if (last[i] > j) j = last[i];
}
fout = fopen("jsp.out", "w");
fprintf(fout, "%d\n", j);
fclose(fout);
/* free all links */
for (i = 0; i < m; i++) {
p = mtime[i];
while (p != NULL) {
tmp = p;
p = p->next;
free(tmp);
}
}
return 0;
}
[/code]
17 楼
vcacm [专家分:1500] 发布于 2007-04-11 21:29:00
[code]
===========NO.4 2k进制数=============
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<memory.h>
#define MAX 1000
long total[MAX],suab[MAX];
long num=0,lab=0;
long k,w;
long jinzi_2k(long mod,long jin)
{
long jin10=1,jin2k=0,i,j,save;
for(i=mod-1;i>=1;i--)
{
save=1;
for(j=1;j<=i;j++)
save*=2;
jin10+=save;
}
jin2k=jin10%jin;
return jin2k;
}
long new_jiecheng(long min,long max,long *sum)
{
long i,j,h,l,digit=0;
sum[0]=min;
for(i=min+1;i<=max;i++)
{
for(j=0;j<=digit;j++)
sum[j]*=i;
for(h=0;h<=digit;h++)
if(sum[h]>=10)
{
if(sum[digit]>=10)
digit++;
sum[h+1]+=sum[h]/10;
sum[h]=sum[h]%10;
}
}
return digit;
}
int big_bijiao(long *sua,long *sub,long la,long lb)
{
long i,j;
for(i=la,j=lb;j>=0&&i>=j;)
{
if(sua[i]>sub[j])
{
break;
}
else if(sua[i]<sub[j])
{
break;
}
else if(sua[i]==sub[j])
{
if(j==0)
break;
j--;
i--;
}
}
if(sua[i]>sub[j])
return 1;
else if(sua[i]<sub[j])
return -1;
return 0;
}
void big_chufa(long sua[],long sub[],long la,long lb)
{
long i,j,h,r,p,q,m,n,laa,len;
long ab[MAX],sab[MAX],saab[MAX];
memset(sab,0,sizeof(sab));
memset(suab,0,sizeof(suab));
memset(saab,0,sizeof(saab));
laa=0;
if(sub[lb]==1&&lb==0)
{
for(i=0;i<=la;i++)
suab[i]=sua[i];
lab=la;
}
else
{
for(i=la;i>=lb;i--)
{
for(j=0;j<=9;)
{
memset(ab,0,sizeof(ab));
for(h=0;h<=lb;h++)
ab[h]=sub[h]*j;
for(r=0;r<lb;r++)
if(ab[r]>=10)
{
ab[r+1]+=ab[r]/10;
ab[r]=ab[r]%10;
}
if(big_bijiao(sua,ab,i,lb)==-1)
break;
else
{
j++;
for(m=0;m<=lb;m++)
sab[m]=ab[m];
}
}
saab[laa++]=j-1;
for(p=0,q=(lb==0)?i:i-lb;p<=lb;p++,q++)
{
if(sua[q]<sab[p])
{
sua[q+1]-=1;
sua[q]+=10;
}
sua[q]-=sab[p];
}
sua[i-1]+=sua[i]*10;
}
len=0;
while(saab[len]==0)
{
len++;
}
lab=laa-len-1;
for(m=0,n=laa-1;m<=lab;m++,n--)
suab[m]=saab[n];
}
}
void big_add()
{
long p,q,r;
num = num>lab ? num+1 : lab+1;
for(p=0;p<=num;p++)
{
total[p]+=suab[p];
if(total[p]>=10)
{
total[p+1]+=total[p]/10;
total[p]%=10;
}
}
if(total[num]==0)
num--;
}
void compute(long n,long m)
{
long i,j,ma;
long sua[MAX],sub[MAX],la=0,lb=0;
memset(sua,0,sizeof(sua));
memset(sub,0,sizeof(sub));
memset(suab,0,sizeof(suab));
lab=0;
ma=m-n;
if(m>n)
{
if(ma>=n)
{
la=new_jiecheng(ma+1,m,sua);
lb=new_jiecheng(1,n,sub);
}
else
{
la=new_jiecheng(n+1,m,sua);
lb=new_jiecheng(1,ma,sub);
}
big_chufa(sua,sub,la,lb);
}
else
{
lab=0;
suab[0]=1;
}
}
int main()
{
long h,i,j,l,wu,most=0,mod,m,ma,mb;
long wei=0,yumax=0;
scanf("%ld %ld",&k,&w);
most=(long)pow(2,k)-1;
if(w%k==0)
{
wei=w/k>most?most:w/k;
for(i=2;i<=wei;i++)
{
compute(i,most);
big_add();
}
}
else if(w%k!=0&&w/k+1>most)
{
wei=most;
for(i=2;i<=wei;i++)
{
compute(i,most);
big_add();
}
}
else if(w%k!=0&&w/k+1<=most)
{
wei=w/k+1;
mod=w%k;
yumax=jinzi_2k(mod,(long)pow(2,k));
for(i=2;i<=wei-1;i++)
{
compute(i,most);
big_add();
}
wu=most-1;
wei=wei-1;
for(j=1;wu>=wei&&j<=yumax;j++)
{
compute(wei,wu);
big_add();
wu--;
}
}
for(m=num;m>=0;m--)
printf("%ld",total[m]);
return 0;
}
======================END======================
[/code]
18 楼
vcacm [专家分:1500] 发布于 2007-04-11 21:38:00
[color=FF00FF]GCC-16 部分题目解答:[/color]
[code]
==============NO.1均分纸牌==========
/* * * * * * * */
/* * name : fenp.c * * * */
/* * zhxdong,15,3, 2007 * * * */
#include <stdio.h>
#define MAX 101
int main(int argc ,char argv[] )
{
long a[MAX],b[MAX],N;
long i,j,k1,k2,num=0,sum=0;
long pin = 0 ;
memset( a, 0 , sizeof(a) );
memset( b, 0 , sizeof(b) );
scanf( "%ld", &N );
for ( i = 1; i <= N ; i ++)
{
scanf("%ld", &a[i]);
sum += a[i];
b[i]= b[i-1] +a[i] ;
}
pin = sum / N ;
for (i=1 ; i < N ; )
{
if (a[i] == pin )
i ++;
else
if (a[i] > pin )
{
num ++;
a[i+1] += a[i] - pin;
i ++ ;
}
else
if (a[i] < pin )
{
j = i;
while (( k1= b[j]) < (k2= j* pin))
j ++ ;
if ( k1 == k2 )
{
num += j-i;
i = j+1 ;
}
else
{
num += j-i+1 ;
a[j+1] += k1 - k2 ;
i = j+ 1;
}
}
}
printf("%ld\n",num);
return 0;
}
[/code]
19 楼
vcacm [专家分:1500] 发布于 2007-04-11 21:42:00
[code]
=========NO.3自由落体========
#include <stdio.h>
#include <math.h>
int main (int argc , char *argv )
{
float h, s1, v , l, k;
long i, j,n;
float t1, t2, t11, t22, g = 10.0;
long num = 0;
scanf ("%f %f %f %f %f %ld",
&h, &s1, &v, &l , &k, &n );
if(v>(long)(v) && v < (long)(v+1))
{
printf("%ld\n",num+1);
return 0;}
t11 = sqrt(2*h/g);
t22 = sqrt(2*(h-k)/g);
for(i=0; i<= n-1; i++)
{
t1 = ((s1-i)/v);
t2 = ((s1-i+l)/v);
if((t1 <= t11 && t2 >= t22)
|| (fabs(g*t1*t1/2-k)<=1e-5)
||(fabs(g*t2*t2/2-k)<=1e-5) )
num ++;
}
printf("%ld\n",num);
/* end = clock();
printf("\nThe program has run %f seconds !\n",
(double)(end-begin)/1000);*/
return 0;
}
=============END======================
[/code]
20 楼
CLO [专家分:2000] 发布于 2007-04-11 22:38:00
呵呵 lz的头像不错啊,Fvwm~~~
我来回复