这道题曾经以为自己做不出来,左码右码还是码出来了,
1086: 一张纸引发的“血”案
Description
这天,有 n 个地球人到一个水星友人的家中做客。
当这水星人拿出仅有的 n 份水星特产——墨丘利的信纸送给 n 个地球友人时,
恰好又来了 n 个火星人到他家拜访。
这 n 个火星人也眼馋这 n 份水星特产,想要这 水星人 把这些礼物给他们。
聪明的地球人为了不让水星友人为难,决定提出一个分配方案:
地球人与火星人一起排成一个排(一排上有 2n 个人),每个人从队首到队尾依次从1开始编号;
然后从排在前头的人开始从 1 开始数数(该人的序号为 1 号);
凡是数到 m (比如 m=7 )的人的,就退出圈子;
然后接着这人的下一个,从 1 开始继续数数;
数到队尾后,接着从队首开始数;
直到圈子最后只有 n 个人为止。
聪明的你如何安排 n 个地球人的序号,
使最终剩下的 n 个人都是地球人?
Input
第一行为一个整数T,表示有T组输入数据( 1<= T <= 100)
每组样例下有一行,
该行有 两个 正整数 n,m ;
n 表示水星特产的数量( 1<= n <= 10000)
m 表示每数 m 次(1<= m <= 100),就踢出一个人
Output
对于每组数据输出一行。
从小到大,顺序输出地球人的序号(序号最小为1)。
Sample Input
3
11 1
7 3
5 10
Sample Output
12 13 14 15 16 17 18 19 20 21 22
2 4 7 8 11 13 14
4 5 7 8 9
解题思路:输入a,e;所以一个循环当为e时赋值0;然后再来个条件判断是否为0;输出不为0的数;
#include <stdio.h>
main()
{
int
i,d,a,e,t,c,k,o,j,f,p,m;
while
(
scanf
(
"%d"
,&i)!=EOF)
{
for
(d=1; d<=i; d++)
{
scanf
(
"%d%d"
,&a,&e);
t=2*a+1;
int
b[t];
for
(c=1; c<t; c++)
{
b[c]=c;
}
f=0;
k=0;
m=0;
do
{j=k%(2*a)+1;
if
(b[j]!=0)
{
f++;
}
while
(f==e)
{
b[j]=0;
f=0;
m++;
}
k++;
}
while
(m<a);
p=0;
for
(o=1; o<t; o++)
{
if
(b[o]!=0)
{
if
(p==a-1)
printf
(
"%d\n"
,b[o]);
else
{
printf
(
"%d "
,b[o]);
p++; }
}
}
}
}
}后来想是代码简单些,提交很多份,结果。。。
今天又翻起校赛的题,
ACM实验室里的春哥特备喜欢研究人的记忆力。自从看了江苏卫视的《最强大脑》后,春哥就开始对这些脑袋进行研究,作为一名大数理信息与计算科学的骄子,春哥重点研究了每个人对数据的采集与存储。
春哥试图发明一种更加科学的方法来帮助人们去记住那些繁杂的数据。(春哥说科学研究表明,和人类相关的信息里,有x%的信息都是以数字的形式存在的。如果有一种办法能帮人们更容易地记住数字,那将卓有成效地提高人类的智商,甚至超越外星人。至于这个x是多少呢,目前还在紧张地研究中)。
经过日日夜夜的猜想、验证。春哥终于发明了一种简单有效的记忆方法。春哥认为,如果把一个数字的各位上的数想加,就会得到一个更小的数字:
1.如果得到的数字依然是个很大的数,那就再把各位上的数相加;
2.如果得到的数字还不是很小,那就再把各位上的数相加;
3.如果得到的数字小的还不是很有诚意,请参见上文;
重复这个过程,终有一天,这个数字会神奇的变成一个一位数!
Input
输入的第一行为一个整数n,标示春哥要记住多少个数字。
接下来n行,每行有一个数字 p ( 1 ≤ p ≤ 2147483647 )
Output
输出一共有n行,每行一个整数表示对应的p经过春哥的压缩之后的结果。
Sample Input
5
7
10
123
88888
20140322
Sample Output
7
1
6
4
#include<stdio.h>
#include<stdlib.h>
main()
{
int
a,b,k,sum;
scanf
(
"%d"
,&a);
while
(a--)
{
scanf
(
"%d"
,&b);
sum=0;
k=b;
while
(k!=0)
{
sum+=k%10;
k/=10;
}
if
(sum>=10)
{ k=sum;
sum=0;
while
(k!=0)
{
sum+=k%10;
k/=10;
}
}
printf
(
"%d\n"
,sum);
}
}
今天又重新拾起,挺寒。
解题思路:把所有各位上的数加起来;然后在看最大数,加起来也是两位数,所以再用一次if就行,