‘壹’ c语言的一道题
这些以身试毒的奴隶,就是一堆bit,1到N这些数字对应酒的编号,所有bit0(化成二进制,最低位是0bit)是1的数字,都给一个人喝;所有bit1是1的数字,依次类推,这样到20小时后,所有中毒奴隶代表的bit组成的数,就是有毒那瓶酒。
如果酒的数量恰好是2的整数次幂,拿走编号最大的那瓶,剩下的按同样方法做。
例:
3瓶酒,要2个人,编号为0和1,0喝最低位是1的酒,即1号瓶和3号瓶
1喝bit1是1的酒,即2号瓶喝3号瓶
这样,结果显而易见,最终中毒的bit是1,没中毒的是0,这个二进制数就是要找的那瓶酒的编号。
‘贰’ C语言的问题
linux下用long long int,windows下用__int64
如果还是溢出,那就考虑用字符串保存
下面是计算第64个格子的示例:
-------------------------------------
#include<stdio.h>
char *reverse(char *, int);
// Only caculates the 64-th grid
int main()
{
char sum[100]="0", num[100]="1"; // sum, total of all 64 chess grids
int i,j,n=1,forward; // num, any chess grid
for (i=1; i<64; i++) {
forward = 0;
for (j=0;j<n;j++) {
num[j] = ((num[j]-'0')*2 +forward) %10 + '0';
forward = ((num[j]-'0')*2 +forward) /10;
}
if (forward == 1) {
num[j] = '1';
n ++;
num[n] = 0;
}
}
printf("%s\n",reverse(num, n));
//getch();
}
char *reverse(char *s, int n) { // n-1, the length of string s
int i, k;
char s1[100];
k=0;
for (i=n-1; i>=0; i--)
s1[k++] = s[i];
for (i=0; i<n; i++)
s[i]=s1[i];
return s;
}
‘叁’ C语言问题
我还有前四题
(1) 基础部分(以下8题,任选5题—60%,多做酌情加分)
①分屏处理数据系统:
随机产生1000个数,并分屏显示(每行显示10个数字,每页显示10行),而且在每一屏的下方显示本屏中数据的最大值、最小值和平均值。
提示:循环显示,在分屏点上输出press any key to continue…,通过getch()函数让用户以按回车键的方式进入下一屏。
②掷骰子游戏:
两人玩骰子,游戏规则如下:
1) 两人轮流掷骰子,每次掷两个,每人最多掷10次。
2) 将每人每次的分值累加计分
3) 当两个骰子点数都为6时,计8分;当两个点数相等且不为两个6时,计7分;当两个点数不一样时,计其中点数较小的骰子的点数。
4) 结束条件:当双方都掷10次或经过5次后一方累计分数为另一方的两倍。最后显示双方分数并判定优胜者。
③射击游戏:
在程序运行时屏幕上方第一行随机出现一个 符号,要求游戏者输入一个1-200之间的整数,当用户输入一个整数后,一个*立即从屏幕底端的该整数列向上移动,若移动到屏幕的顶端能撞上 符号,则游戏者获胜;若没有撞上,则要求再输入一个整数,共允许输入5次,如果一直没有撞上,则认为游戏者输。
提示:
1)输入 符号可以采用printf("%c",'\1')
2)显示*号向上移动:输出一些空行;输出*号;以循环的方式增加延时(for(i=0;i<100000;i++););clrscr()清屏重新绘制*号。
④车票问题:
假设某线路的公共汽车共设置26个车站,准备了1元、2元…6元的车票,收费标准为:6站以内票价为1元,每4站票价增加1元。现在随机生成一些乘客的上车站与下车站,显示每位乘客应付的票价和单程售出的总票价,并统计几元的车票卖得最多。
‘肆’ 用C语言编写,/* 国王分财产。某国王临终前给儿子们分财产。
#include<stdio.h>
void main()
{
int a[100], i = 0, n = 0;
while (1)
{
n = n + 9;
a[n] = n;
for (i = n - 1;i >= 1;i--)
{
if (a[i + 1] % 9 != 0)
break;
else
a[i] = a[i + 1] * 10 / 9 + i;
}
if (i)
break;
}
printf("共有%d个儿子\n财产分为%d份", n, a[1]);
getchar();
}
‘伍’ 国王分财产问题 要求用c++编写 直接一点
不对啊?
这好像是个无穷递归的情况啊~~
每个人都得到1份,然后那剩余的1/10,那剩余还有“剩余的9/10”啊。。。
难道这个“剩余”是指分成若干份以后,剩下的“剩余”?
如果是的话,实际上就是10个罗。。。
‘陆’ 编写一个c程序模拟找假币的过程,注意尽量用较少的次数找出这枚假币。包括算法分析,数据表示,程序流程
分治法就可以了,分15-15来称,轻的15取一个出来再分7-7称,要是相等那么取出来的是假,不想等把轻的再取一个分3-3称,如此类推。最坏打算是4次。最好是2次。
‘柒’ 求国际象棋中国王要打赏发明象棋的大臣的程序(c语言)
#include <iostream>
using namespace std;
void main()
{
long double i=1,sum=0;
int j;
for(j=0;j<64;j++)
{
sum+=i;
i*=2;
cout<<sum<<endl;
}
cout<<"total rice is:"<<sum<<endl;
}
数字太大,后边是科学计数
‘捌’ 急求,我是c语言初学者,有一道要用for循环语句编写的题目。
// wheat.h
#include "stdio.h"
#define CELLS 64; //格子数量
void main(void)
{
int index,each_cell,sum;
double volume_wheat;
for(index=1;index<=CELLS;index++)
{
each_cell=2^(index-1);//每个格子麦子的数量
sum+=each_cell; //统计麦子总数
}
volume_wheat=sum/(1.42*108);
printf("麦子总数量:%d\n",sum);
printf("麦子的立方数:%lf\n",volume_wheat);
return 0;
}
‘玖’ 今年的普及组第一题,c语言!有错误吗 题目: 国王给骑士奖励,第一天一金币,第二三天两金币
#include <stdio.h>
int main()
{
freopen("coin.in", "r", stdin);
freopen("coin.out", "w", stdout);
int n,i,j;
scanf("%d", &n);
int ans = 0, count=0;
i=1;
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
ans+=i;
count++;
if(count==n)
{
printf("%d", ans);
fclose(stdin);
fclose(stdout);
return 0;
}
}
}
fclose(stdin);
fclose(stdout);
return 0;
}