NOIP2007 初赛试题(提高组 C++)

#include <stdio.h>
int main()
{
	int i, p[5], q[5], x, y = 20;
	for ( i = 0; i <= 4; i++ )
		scanf( "%d", &p[i] );
	q[0]	= (p[0] + p[1]) + (p[2] + p[3] + p[4]) / 7;
	q[1]	= p[0] + p[1] / ( (p[2] + p[3]) / p[4]);
	q[2]	= p[0] * p[1] / p[2];
	q[3]	= q[0] * q[1];
	q[4]	= q[1] + q[2] + q[3];
	x	= (q[0] + q[4] + 2) - p[(q[3] + 3) % 4];
	if ( x > 10 )
		y += (q[1] * 100 - q[3]) / (p[p[4] % 3] * 5);
	else
		y += 20 + (q[2] * 100 - q[3]) / (p[p[4] % 3] * 5);
	printf( "%d,%d\n", x, y );
	return(0);
}
/*注:本例中,给定的输入数据可以避免分母为 0 或数组元素下标越界。*/ 

#include <stdio.h>
void fun( int *a, int *b )
{
	int *k;
	k = a; a = b; b = k;
}


main()
{
	int a = 3, b = 6, *x = &a, *y = &b;
	fun( x, y );
	printf( "No.1: %d,%d ", a, b );
	fun( &a, &b );
	printf( "No.2: %d,%d\n", a, b );
}

#include "math.h"
#include "stdio.h"
main()
{
	int	a1[51] = { 0 };
	int	i, j, t, t2, n = 50;
	for ( i = 2; i <= sqrt( n ); i++ )
		if ( a1[i] == 0 )
		{
			t2 = n / i;
			for ( j = 2; j <= t2; j++ )
				a1[i * j] = 1;
		}
	t = 0;
	for ( i = 2; i <= n; i++ )
		if ( a1[i] == 0 )
		{
			printf( "%4d", i ); t++;
			if ( t % 10 == 0 )
				printf( "\n" );
		}
	printf( "\n" );
}

#include "stdio.h"
char	ch[] = { 'q', 'A', 'S', 'O', 'R', 'T', 'E', 'X', 'A', 'M', 'P', 'L', 'E' };
int	n = 12;
void shift( int k, int n )
{
	char	v;
	int	j;
	v = ch[k]; j = k + k;
	while ( j <= n )
	{
		if ( (j < n) && (ch[j] < ch[j + 1]) )
			j++;
		if ( v < ch[j] )
		{
			ch[j / 2] = ch[j]; j *= 2;
		}else
			return;
		ch[j / 2] = v;
	}
}


void hpsrt( void )
{
	int	k;
	char	tmp;
	for ( k = n / 2; k > 0; k-- )
		shift( k, n );    /* 建堆*/
	printf( "No.1: " );
	for ( k = 1; k <= n; k++ )
		putchar( ch[k] );
	putchar( '\n' );
	for ( k = n; k > 0; k-- )
	{
		tmp = ch[1]; ch[1] = ch[k]; ch[k] = tmp;
		shift( 1, k - 1 );
	}
}


main()
{
	int k;
	hpsrt();
	printf( "No.2: " );
	for ( k = 1; k <= n; k++ )
		putchar( ch[k] );
	putchar( '\n' );
}

#include <stdio.h>
main()
{
	int bound = 1, m, n, i, j, b, p, gr[15];
	printf( "input n,m\n" );
	scanf( "%d%d", &n, &m );
	for ( i = 1; i <= n; i++ )
		bound = ①;
	if ( m < 0 || m >= bound )
	{
		printf( "Data error!\n" );
		②;
	}
	b = 1;
	for ( i = 1; i <= n; i++ )
	{
		p = 0; b = b * 2;
		for ( ③; j <= m; j++ )
			if ( ④ )
				p = 1 - p;
		gr[i] = p;
	}
	for ( i = n; ⑤ )
		printf( "%1d", gr[i] );  /* 在"%1d" 中出现的是数字1,不是字母l */
	printf( "\n" );
}

 

#include <stdio.h>
#define NN	20
#define maxint	30000
#define maxl	500 /*邮资的最大值*/
int n, m, bestx[NN], x[NN], y[maxl], maxvalue = 0;
void result()
{
	//输出结果: 最大值:maxvalue 及最优解:bestx[1:n](略)
}


void backtrace( int i, int r )
{
	int j, k, z[maxl];
	for ( j = 0; j <= ①; j++ )
		if ( y[j] < m )
			for ( k = 1; k <= m - y[j]; k++ )
				if ( y[j] + k <= y[②] )
					y[③] = y[j] + k;
	while ( y[r] < maxint )
		r++;
	if ( i > n )
	{
		if ( r - 1 > maxvalue )
		{
			maxvalue = ④;
			for ( j = 1; j <= n; j++ )
				bestx[j] = x[j];
		}
		return;
	}
	for ( k = 0; k < maxl; k++ )
		z[k] = y[k];
	for ( j = ⑤; j <= r; j++ )
	{
		x[i] = j;
		⑥;
		for ( k = 0; k < maxl; k++ )
			y[k] = z[k];
	}
}


void main()
{
	int j;
	printf( "input n,m:\n" );
	scanf( “ % d % d ”, &n, &m );
	for ( j = 1; j < maxl; j++ )
		y[j] = maxint;
	y[0] = 0; x[0] = 0; x[1] = 1;
	backtrace( 2, 1 );
	result();
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值