信息学奥赛一本通 1.4:循环结构的程序设计(2)

网友投稿 2020-04-07 10:34

第一部分 C++语言

第四章 循环结构的程序设计

第二节 while语句

1085 球弹跳高度的计算

#include
using namespace std;
int main(){
double h;
scanf("%lf", &h);
double ttl = h;
int n = 1;
while(n < 10){
n++;
h /= 2;
ttl += h*2;
}
printf("%gn%gn", ttl, h/2);
return 0;
}
1086 角谷猜想
#include
using namespace std;
int main() {
int n;
scanf("%d", &n);
while (n != 1) {
if ( n%2 == 0) {
printf("%d/2=%dn", n, n/2);
n /= 2;
}
else{
printf("%d*3+1=%dn", n, n*3+1);
n = n * 3 + 1;
}
}
printf("Endn");
return 0;
}
1087 级数求和
#include
using namespace std;
int main() {
int k, n = 0;
double sum = 0;
scanf("%d", &k);
while (sum <= k) {
n++;
sum += 1.0 / n;
}
printf("%dn", n);
return 0;
}
1088 分离整数的各个数
#include
using namespace std;
int main() {
int n;
scanf("%d", &n);
while (n) {
printf("%d ", n%10);
n /= 10;
}
return 0;
}
1089 数字反转
#include
using namespace std;
int main() {
int n;
scanf("%d", &n);
if (n < 0) {
printf("-");
n *= -1;
}
while (n % 10 == 0) {
n /= 10;
}
while (n) {
printf("%d", n%10);
n /= 10;
}
return 0;
}
1090 含k个3的数
#include
using namespace std;
int main() {
int m, k, cnt = 0;
scanf("%d%d", &m, &k);
int t = m;
while (t) {
if (t%10 == 3) cnt++;
t /= 10;
}
if (cnt == k && m%19 == 0) {
printf("YESn");
}
else {
printf("NOn");
}
return 0;
}

第四节 循环嵌套

1091 求阶乘的和

#include
using namespace std;
int main() {
int n, t = 1, s = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
t = 1;
for (int j = 1; j <= i; j++) {
t *= j;
}
s += t;
}
printf("%dn", s);
return 0;
}
1092 求出e的值
#include
using namespace std;
int main() {
int n;
long long t = 1;
double s = 1;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
t = 1;
for (int j = 1; j <= i; j++) {
t *= j;
}
s += 1.0 / t;
}
printf("%.10lfn", s);
return 0;
}
1093 计算多项式的值
#include
using namespace std;
int main() {
int n;
double x = 1, t = 1, s = 1;
scanf("%lf%d", &x, &n);
for (int i = 1; i <= n; i++) {
t = 1;
for (int j = 1; j <= i; j++) {
t *= x;
}
s += t;
}
printf("%.2lfn", s);
return 0;
}
1094 与7无关的数
#include
using namespace std;
int main() {
int n, sum = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
if (i%10 != 7 && i/10 != 7 && i%7 !=0) {
sum += i * i;
}
}
printf("%dn", sum);
return 0;
}
1095 数1的个数
#include
using namespace std;
int main() {
int n, cnt = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
int t = i;
while (t) {
if (t%10 == 1) cnt++;
t /= 10;
}
}
printf("%dn", cnt);
return 0;
}
1096 数字统计
#include
using namespace std;
int main() {
int l, r, cnt = 0;
scanf("%d%d", &l, &r);
for (int i = l; i <= r; i++) {
int t = i;
while (t) {
if (t%10 == 2) cnt++;
t /= 10;
}
}
printf("%dn", cnt);
return 0;
}
1097 画矩形
#include
using namespace std;
int main() {
int h, w, flag;
char ch;
scanf("%d %d %c %d", &h, &w, &ch, &flag);
for (int j = 0; j < w; j++) printf("%c", ch);
printf("n");
for (int i = 1; i < h - 1; i++) {
printf("%c", ch);
for (int j = 1; j < w - 1; j++) {
if (flag) printf("%c", ch);
else printf(" ");
}
printf("%cn", ch);
}
for (int j = 0; j < w; j++) printf("%c", ch);
return 0;
}
1098 质因数分解
#include
using namespace std;
int main() {
int n;
scanf("%d", &n);
for (int i = 2; i <= n/i; i++) {
if (n % i == 0) {
printf("%d", n / i);
break;
}
}
return 0;
}
1099 第n小的质数
#include
using namespace std;
int main() {
int n;
scanf("%d", &n);
int i, j;
for (i = 2, j = 0; j < n; i++) {
bool flag = true;
for (int k = 2; k <= i/k; k++) {
if (i%k == 0) {
flag = false;
break;
}
}
if (flag) j++;
}
printf("%d", i - 1);
return 0;
}
1100 金币
#include
using namespace std;
int main() {
int n, sum=0, day=0;
scanf("%d", &n);
for (int i = 1; ; i++) {
for (int j = 1; j <= i; j++) {
day++;
if (day > n) {
printf("%dn", sum);
return 0;
}
sum += i;
}
}
return 0;
}
1101 不定方程求解
#include
using namespace std;
int main() {
int a, b, c, cnt = 0;
scanf("%d%d%d", &a, &b, &c);
for (int x = 0; x <= c; x++) {
for (int y = 0; y <= c; y++) {
if (a*x + b*y == c) cnt++;
}
}
printf("%dn", cnt);
return 0;
}

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com