POJ 2115 C Looooops
来源:互联网 发布:2017福利彩票中奖软件 编辑:程序博客网 时间:2024/06/02 19:54
C Looooops
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 17953 Accepted: 4680
Description
A Compiler Mystery: We are given a C-language style for loop of type
I.e., a loop which starts by setting variable to value A and while variable is not equal to B, repeats statement followed by increasing the variable by C. We want to know how many times does the statement get executed for particular values of A, B and C, assuming that all arithmetics is calculated in a k-bit unsigned integer type (with values 0 <= x < 2k) modulo 2k.
for (variable = A; variable != B; variable += C) statement;
I.e., a loop which starts by setting variable to value A and while variable is not equal to B, repeats statement followed by increasing the variable by C. We want to know how many times does the statement get executed for particular values of A, B and C, assuming that all arithmetics is calculated in a k-bit unsigned integer type (with values 0 <= x < 2k) modulo 2k.
Input
The input consists of several instances. Each instance is described by a single line with four integers A, B, C, k separated by a single space. The integer k (1 <= k <= 32) is the number of bits of the control variable of the loop and A, B, C (0 <= A, B, C < 2k) are the parameters of the loop.
The input is finished by a line containing four zeros.
The input is finished by a line containing four zeros.
Output
The output consists of several lines corresponding to the instances on the input. The i-th line contains either the number of executions of the statement in the i-th instance (a single integer number) or the word FOREVER if the loop does not terminate.
Sample Input
3 3 2 163 7 2 167 3 2 163 4 2 160 0 0 0
Sample Output
0232766FOREVER
Source
CTU Open 2004
题目大意:给你A,B,C,K,四个数字,A,B,C,相当于for (variable = A; variable != B; variable += C),K是一个代表多少位的二进制的数。让你求运行多少次循环结束。
思路:欧几里得拓展算法。
#include <stdio.h>long long a, b, c, k, x, y;long long gcd(long long a, long long b)//拓展的欧几里得算法{ if (b ==0) { x =1; y =0; return a; } long long d = gcd(b, a % b); long long t = x; x = y; y = t - a / b * y; return d;}int main(){ while (~scanf("%I64d%I64d%I64d%I64d", &a, &b, &c, &k)) { if(a + b + c + k == 0) break; long long t = b - a; long long h =1; h <<= k; //计算2的K次方 long long g = gcd(c, h); if (t % g !=0) //如果不能整除则无整数解,则循环不会停止 { printf("FOREVER\n"); continue; } x *= t / g; x = (x % (h / g) + (h / g)) % (h / g); printf("%I64d\n", x); } return 0;}
0 0
- poj 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- poj 2115 C Looooops
- POJ 2115 (C Looooops)
- poj 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- poj 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115 C Looooops
- POJ 2115--C Looooops
- 操作系统(二)
- 字符测试
- Cocos2d-x 学习笔记
- P2P入门理财经验谈
- 10 android编译全过程 及 单独编译Android源代码中的模块
- POJ 2115 C Looooops
- http中get与post的区别
- TrayIcon组件的使用
- linux :内核调试神器SystemTap — 简介与使用(一)
- 函数对象
- 非GUI-Qt程序运行后显示Console
- 相干带宽与相干时间
- 计算机网络---wireshark学习
- SharedPreferences