| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4007 人关注过本帖
标题:▲★★@76道较难度C练习题.含NOI竞赛题.欢迎挑战●◆〓#
只看楼主 加入收藏
hujian100
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2006-9-14
收藏
得分:0 

/*----------------------------------------------------------------------------
第八题:输入两个正整数X,Y,将X,Y化为二进制数,然后将这两个二进制数作二进
制加法运算,再将结果化为十进制数输出。
----------------------------------------------------------------------------*/
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define N 8

void main()
{
int num1, num2, result = 0;
int NUM1[N] = {0}, NUM2[N] = {0}, RESULT[N + 1] = {0};
int i, temp, addition = 0;

printf( "Please input two active integers(0 ~ %d):", (int)pow(2,N) - 1 );
scanf( "%d%d", &num1, &num2 );

for( i = N - 1; num1 != 0; i -- ) /*把第一个整数转换为二进制数*/
{
NUM1[i] = num1 % 2;
num1 /= 2;
}
for( ; i >= 0; i -- )
NUM1[i] = 0;
printf( "No.1 is:\t" ); /*输出第一个数的二进制形式*/
for( i = 0; i < N; i ++ )
printf( "%d ", NUM1[i] );
printf( "\n" );

for( i = N - 1; num2 != 0; i -- ) /*把第二个整数转换为二进制数*/
{
NUM2[i] = num2 % 2;
num2 /= 2;
}
for( ; i >= 0; i -- )
NUM2[i] = 0;
printf( "No.2 is:\t" ); /*输出第二个数的二进制形式*/
for( i = 0; i < N; i ++ )
printf( "%d ", NUM2[i] );
printf( "\n" );

for( i = N - 1; i >= 0; i -- ) /*在二进制的形势下求两数之和*/
{
temp = NUM1[i] + NUM2[i] + addition;
if( temp == 3 )
{
RESULT[i + 1] = 1;
addition = 1;
}
else if( temp == 2 )
{
RESULT[i + 1] = 0;
addition = 1;
}
else if( temp == 1 )
{
RESULT[i + 1] = 1;
addition = 0;
}
else
{
RESULT[i + 1] = 0;
addition = 0;
}
}
RESULT[0] += addition;

printf( "The sum is: " ); /*输出和的二进制形式*/
for( i = 0; i <=N; i ++ )
printf( "%d ", RESULT[i] );
printf( "\n" );

for( i = 0; i <= N; i ++ ) /*求出和的十进制形式*/
result += RESULT[N - i] * ( (int)pow(2,i) );
printf( "The result is:%d\n", result );
getch();
}


2007-06-28 21:32
a307871404
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-6-19
收藏
得分:0 

我已经知道错在哪了,把我15,19楼的删了吧


我让我喜欢的人不开心     真没用
2007-06-29 13:15
hujian100
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2006-9-14
收藏
得分:0 

/*-------------------------------------------------------------------------------
第九题:四人玩火柴棍游戏,每一次都是三个人赢,一个人输。输的人要按赢者手中的火柴
数进行赔偿,即赢者手中有多少根火柴棍,输者就赔偿多少根。现知道玩过四次后,每人恰
好输过一次, 而且每人手中都正好有16根火柴。问此四人做游戏前手中各有多少根火柴?
编程解决此问题。
--------------------------------------------------------------------------------*/
#include <stdio.h>

void main()
{
int i, j, temp;
int matchnum[4] = { 16, 16, 16, 16 };

for( i = 1; i <= 4; i ++ )
{
for( j = 1; j <= 3; j ++ )
{
matchnum[j] /= 2;
matchnum[0] += matchnum[j];
}
temp = matchnum[0];
for( j = 0; j <= 2; j ++ )
matchnum[j] = matchnum[j + 1];
matchnum[3] = temp;
}
for( i = 0; i <= 3; i ++ )
printf( "%d\t", matchnum[i] );
}

算法很简单,就是利用倒推法,先把最后的结果放在一个数组里,令数组的第一个元素的值为每轮游戏后输的那个人剩下的火柴数目,每轮运算完后循环移位就可以了。


2007-07-02 23:43
yhl888999
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-6-24
收藏
得分:0 
fdsfsdf
2011-06-24 19:36
快速回复:▲★★@76道较难度C练习题.含NOI竞赛题.欢迎挑战●◆〓#
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011939 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved