GDUFE-OJ 1361校庆抽奖 翻转

Problem Description:

在舞台中央有一个开奖盒,开奖盒有一个按钮,和一个显示屏,每轮抽奖是过程是这样的。
主持人请K个幸运观众上台,编号为1~K,围着开奖盒。
首先开奖盒上随机显示一个数字S。然后由幸运观众轮流按下按钮。
每次按按钮,数字就会发生变化,直到为0的时候,盒子就会打开,那名观众就会得到里面的奖品。
数字变化的规则如下:
原数字是一个t位二进制数字(不含前导0),按下按钮后原数字的所有位进行翻转,得到变化之后的数字。
比如原数字S = 233,它是二进制是11101001,那么翻转之后是00010110,即10110。
依次按下按钮,11101001 → 10110 → 1001 → 110 → 1 → 0 。
那么第五个按下按钮的幸运观众将会得到奖品。

Input:

输入的第一行包括一个T(T <= 50),代表有T轮抽奖。
每组数组包括两个整数S和K(S < 2^31, K < 10)。

Output:

对于每组数据,输出"Case #x: y"(不包括引号),其中x代表数据的编号,从1开始,y代表该组数据的结果。

Sample Input:

2
233 5
233 4

Sample Output:

Case #1: 5
Case #2: 1

Hints:
两组样例,11101001 → 10110 → 1001 → 110 → 1 → 0 ,其中一个箭头代表按一次按钮  

思路:不找规律,中规中矩翻转,然后去掉前面的0,再翻转……直到剩下全是0.
 1 #include <stdio.h>
 2 int main()
 3 {
 4     int s=0,T,S,K,i,c,a,k,g,h;
 5     while(scanf("%d",&T)!=EOF)
 6         while(T--)
 7     {
 8         int ch[33]={0};
 9         s++;
10         c=1;
11         scanf("%d%d",&S,&K);
12         a=S;
13         for(i=0;a;i++)
14         {
15             ch[i]=a%2;
16             a/=2;//求二进制数,反向存入
17         }
18             for(k=31;k>=0;k--)
19             {
20                 if(ch[k]!=0)break;//去掉后面的0(因为是反向)
21             }
22         for(;;c++)
23         {
24             for(i=0;i<=k;i++)
25             {
26                 if(ch[i]==0)ch[i]=1;//取反啊
27                 else ch[i]=0;
28             }
29             for(;k>=0;k--)
30             {
31                 if(ch[k]!=0)break;//再去掉后面的0
32             }
33             for(i=0,g=0;i<32;i++)
34             {
35                 if(ch[i]!=0)
36                     g=1;
37             }
38             if(g==0)break;//直到全是0
39         }
40         if(c>K)
41             {
42                 c=c%K;
43                 if(c==0)c=K;//此处易漏,such:c=10,K=5   puts(c=5) (not 0)
44             }
45         if(S==0)c=0;
46         printf("Case #%d: %d\n",s,c);
47     }
48     return 0;
49 }

Tips:int是32位二进制数啊-。-

				
时间: 2024-10-09 11:15:55

GDUFE-OJ 1361校庆抽奖 翻转的相关文章

【算法学习笔记】50.字符串处理 SJTU OJ 1361 丁姐的周末

Description 丁姐来到了神秘的M78星云,为了成为和凹凸曼一样强大的男人有朝一日回到地球拯救世界,丁姐开始了刻苦的学习.但丁姐先要知道在M78星云上一周有多少天,这样他才能知道什么时候是周末可以带妹子出去玩.他找到一个老凹凸曼,但是老凹凸曼自己记性不太好,偶尔会告诉他错误的信息. 凹凸曼会告诉丁姐如下格式的信息: Today is xxxday. Yesterday was yyyend. Tomorrow will be zzzday. 规则1: xxx/yyy/zzz为任意字符串,

九度oj 题目1171:C翻转

题目描述: 首先输入一个5 * 5的数组,然后输入一行,这一行有四个数,前两个代表操作类型,后两个数x y代表需操作数据为以x y为左上角的那几个数据. 操作类型有四种:  1 2 表示:90度,顺时针,翻转4个数  1 3 表示:90度,顺时针,翻转9个数  2 2 表示:90度,逆时针,翻转4个数  2 3 表示:90度,逆时针,翻转9个数 输入: 输入有多组数据. 每组输入一个5 * 5的数组,然后输入一行,这一行有四个数,前两个代表操作类型,后两个数x y代表需操作数据为以x y为左上角

[Jobdu] 题目1361:翻转单词顺序

题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,"student. a am I".后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是"I am a student.".Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 输入: 每个测试案例为一行,表示一句英文句子. 我们保证一个句子的单词数不会超过600

LeetCode OJ:Search in Rotated Sorted Array(翻转排序数组的查找)

Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If found in the array return its index, otherwise return -1. You may assume no duplic

LeetCode OJ:Search in Rotated Sorted Array II(翻转排序数组的查找)

Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this affect the run-time complexity? How and why? Write a function to determine if a given target is in the array. 这个和前面的一个不一样就在于可能会有重复的数字,那么判断的时候就应该注意了,遇到start

【剑指offer】翻转单词顺序

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27372033 题目描写叙述: JOBDU近期来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看.但却读不懂它的意思.比如,"student. a am I".后来才意识到.这家伙原来把句子单词的顺序翻转了,正确的句子应该是"I am a student.". Cat对一一

剑指offer系列源码-翻转单词顺序

题目1361:翻转单词顺序 时间限制:2 秒内存限制:32 兆特殊判题:否提交:1935解决:572 题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,"student. a am I".后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是"I am a student.".Cat对一一的翻转这些单词顺序可不在行,

【转】对于杭电OJ题目的分类

[好像博客园不能直接转载,所以我复制过来了..] 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDI

LeetCode OJ - Reverse Linked List II

题目: Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1->2->3->4->5->NULL, m = 2 and n = 4, return 1->4->3->2->5->NULL. Note:Given m, n satisfy the following condition:1 ≤ m ≤ n ≤ l