n诺1001-1020
1001 01序列
对于长度为6位的一个01串,每一位都可能是0或1,一共有64种可能。它的前几个是:
000000
000001
000010
000011
000100
请按从小到大的顺序输出这64种01串。
#include <iostream> #include<string> using namespace std; int main() { int a[6]; for (int i = 0; i < 64; i++) { int n = i; for (int j = 0; j < 6; j++) { a[j] = n% 2; n = n / 2; } for (int k = 5; k >= 0; k--) { cout << a[k]; }cout << endl; } return 0; }
1002数字统计
请统计某个给定范围[L, R]的所有整数中,数字 2 出现的次数。
比如给定范围[2, 22],数字 2 在数 2 中出现了 1 次,在数 12 中出现 1 次,在数 20 中出现 1次,
在数 21 中出现 1次,在数 22 中出现 2 次,所以数字 2 在该范围内一共出现了 6次。
#include<iostream> using namespace std; int fun(int n) { int count = 0; while (n > 0) { if (n % 10 == 2) count++; n = n / 10; } return count; } int main() { int l, r; while (cin >> l >> r) { int count = 0; for (int i = l; i <= r; i++) count = count + fun(i); cout << count << endl; } return 0; }
1003 翻转数的和
翻转数就是把一个数的所有数字以相反顺序写出来,即原来的第一个数字成为最后一个,而原来的最后一个则成为第一个。我们把未翻转的数称为翻转数的原数。
例 如:6789的翻转数是9876,而6789就是9876的原数。
你一定注意到了,一个翻转数的原数可以有很多个,例如18的原数可以是81、810、8100等等。因此我们假定:通过翻转数求原数时,所求得的原数的个 位不为零。即18的原数就是81。
Lucy现在给出2个翻转数A、B。
这两个翻转数各自对应的原数是C、D,C 与D的和为 S ,Lucy想知道 S是多少?
#include<iostream> using namespace std; int main() { int a, b; while (cin >> a >> b) { int m=0, n=0; while (a > 0) { m = m*10+a % 10; a = a / 10; } while (b > 0) { n = n * 10 + b % 10; b = b / 10; } cout << n + m << endl; } }
1005 博学楼的阶梯
众所周知,北校区的博学楼是有11层楼,并且有三个电梯。假设电梯上升一层需要6秒,下降一层需要4秒,在每在一层停留需要3秒。电梯初始在1楼,现在给你电梯要去楼层顺序,例如3,2,5代表电梯从1楼到达三楼,再从三楼到达2楼,再从2楼到达5楼。问通过这些操作,电梯需要花多少时间?例如3,2,5,从1楼到3楼需要2 * 6秒,然后停留3秒,再从3楼到2楼需要4秒,再停留3秒,再由2楼到5楼需要3 * 6秒,停留3秒。所以总共需要2 * 6 + 3 + 4 + 3 + 3 * 6 + 3 = 43。如果上次要停留的楼层与这次相同,则只需要再停留3秒即可。
#include<iostream> using namespace std; int main() { int n, m, a[11]; cin >> n; while (n--) { int sum = 0; cin >> m; a[0] = 1; for (int i = 1; i <=m; i++) { cin >> a[i]; if (a[i] > a[i - 1]) sum = sum + (a[i] - a[i - 1]) * 6 + 3; else sum = sum + (a[i - 1] - a[i]) * 4 + 3; } cout << sum << endl; } return 0; }
1006 字符串的翻转
输入一个字符串在单独的一行,字符串长度<100。
输出描述:
将字符串反序输出。
#include<iostream> #include<string> using namespace std; int main() { string s; cin >> s; for (int i = s.size()-1; i >= 0; i--) cout << s[i]; cout << endl; return 0; }
1007 整除
输出100到1000之间能被5和6同时整除的数,输出格式为每10个数为一行。
#include<iostream> #include<string> using namespace std; int main() { int n = 0; for (int i = 100; i <= 1000; i++) { if (i % 5 == 0 && i % 6 == 0) { cout << i << " "; n++; if (n % 10 == 0) cout << endl; } } return 0; }
1008 0和1的数
给定一个int型整数,输出这个整数的二进制的0和1的个数。
输入输出格式
输入描述:
输入一个整数n
输出描述:
输出这个整数的二进制的0和1的个数。
#include<iostream> #include<string> using namespace std; int main() { int x, count1 = 0; cin >> x; while (x) { if (x % 2 == 1) count1++; x = x / 2; } cout << "count0=" << 32 - count1 << " count1=" << count1 << endl; return 0; }
1009 随机数
从1—20之间随机抽取5个数,输出抽取出来的5个数之和与剩余未被抽取的15个数之和的总和。
#include<iostream> using namespace std; int main() { int i,sum=0; for(i=1;i<=20;i++) sum=sum+i; cout<<sum<<endl; return 0; }
附代码生成随机数
#include <iostream> #include <cstdlib> // srand() 包含在这个库中 #include <ctime> //time() 包含在这个库中, //也可以使用time.h这个头文件,但C++还是用<ctime>统一一些 using namespace std; int main() { srand(time(NULL)); // srand()括号当中就是种子的数值,默认情况是srand(1) // time(NULL)可以获得当下的系统时间,也可以用time(0) for (int i = 0; i < 20; i++) { int random_number = rand() % 10; //这里生成的随机数可以通过取余的方式限制范围 cout << random_number << endl; //每次执行的结果是不同的,达到生成随机数的目的 } return 0; }
1010 排序
输入n个数进行排序,要求先按奇偶后按从小到大的顺序排序。
#include <iostream> #include<algorithm> using namespace std; bool cmp(int a, int b) { if (a % 2 == b % 2) return a < b; else return a % 2 > b % 2; } int main() { int n, a[1000]; cin >> n; for (int i = 0; i < n; i++) cin >> a[i]; sort(a, a + n,cmp); for (int i = 0; i < n; i++) cout << a[i] << ' '; cout << endl; return 0; }
1011 日期
今天是2012年4月12日星期四,编写程序,输入今天开始到12月31日之间的任意日期,输出那一天是星期几。例如输入“5(回车)20(回车)”(5月20日),输出应为“Sunday”。
#include <iostream> #include<algorithm> using namespace std; int tab[13] = { 0,31,29,31,30,31,30,31,31,30,31,30,31 }; int main() { int month, day, days = 0; cin >> month >> day; for (int i = 4; i < month; i++) days = days + tab[i]; days = days + day - 12; int k = (days + 4) % 7; switch (k) { case 0:cout << "Sunday"; break; case 1:cout << "Monday"; break; case 2:cout << "Tuesday"; break; case 3:cout << "Wednesday"; break; case 4:cout << "Thursday"; break; case 5:cout << "Friday"; break; case 6:cout << "Saturday"; break; } return 0; }
1012 字符移动
输入一个字符串,将其中的数字字符移动到非数字字符之后,并保持数字字符和非数字字符输入时的顺序。例如:输入字符串“ab4f35gr#a6”,输出为“abfgr#a4356”。
#include <iostream> #include<algorithm> using namespace std; int main() { char s[100]; bool f[100]; cin >> s; int len = strlen(s); for (int i = 0; i < len; i++) { if (s[i] <= '9'&&s[i] >= '0') f[i] = 1; else { f[i] = 0; cout << s[i]; } } for (int i = 0; i < len; i++) if (f[i] == 1)cout << s[i]; cout << endl; return 0; }
1013判断是否为素数
输入一个整数,判断该整数是否为素数,若是,输出该整数,若否,输出大于该整数的第一个素数。(例如,输入为14,输出17,因为17是大于14的第一个素数)
#include <iostream> #include<algorithm> using namespace std; bool isprime(int n) { for (int i = 2; i < sqrt(n); i++) if (n%i == 0) return false; return true; } int main() { int n; while (cin >> n) { if (isprime(n)) cout << n << endl; else { for(int i=n+1;;i++) if (isprime(i)) { cout << i << endl; break; } } } return 0; }
1014加密算法
编写加密程序,加密规则为:将所有字母转化为该字母后的第三个字母,即A->D、B->E、C->F、…、Y->B、Z->C。小写字母同上,其他字符不做转化。输入任意字符串,输出加密后的结果。
例如:输入"I love 007",输出"L oryh 007"
#include <iostream> #include<algorithm> using namespace std; int main() { char s[100]; while (gets_s(s)) { int len = strlen(s); for (int i = 0; i < len; i++) { if (s[i] >= 'a'&&s[i] <= 'z') { if ((s[i] + 3) >= 'z')s[i] = s[i] - 23; else s[i] = s[i] + 3; } if (s[i] >= 'A'&&s[i] <= 'Z') { if ((s[i] + 3) >= 'Z')s[i] = s[i] - 23; else s[i] = s[i] + 3; } } puts(s); } return 0; }
1015 单链表
从键盘输入5个整数,将这些整数插入到一个链表中,并按从小到大次序排列,最后输出这些整数。
#include<iostream> using namespace std; struct Node { int Element; // 节点中的元素为整数类型 struct Node * Next; // 指向下一个节点 }; int main() { struct Node* head = new struct Node; struct Node *p, *q; head->Next = NULL; int num; for (int i = 0; i < 5; i++) { cin >> num; p = head; while (p->Next != NULL && p->Next->Element < num)//找到合适的插入位置 p = p->Next; q = new struct Node; //将节点插入相应位置 q->Element = num; q->Next = p->Next; p->Next = q; } p = head->Next; while (p->Next) { cout << p->Element << " "; p = p->Next; } cout << p->Element << endl; return 0; }
1016字符分类
从键盘上输入一个字符串,将该字符串分为数字、字母、其他字符三个部分输出。
例如:
输入:Thdad29#@12aH;77
输出:
ThdadaH
291277
#@;
#include <iostream> #include<algorithm> using namespace std; int main() { char s[100], a[100], n[100], b[100]; int i, j, k, m; while (gets_s(s)) { j = 0, k = 0, m = 0; int len = strlen(s); for (i = 0; i < len; i++) { if (s[i] >= 'a'&&s[i] <= 'z'|| s[i] >= 'A'&&s[i] <= 'Z') a[j++] = s[i]; else if (s[i] >= '0'&&s[i] <= '9') n[k++] = s[i]; else b[m++] = s[i]; } a[j] = '\0'; n[k] = '\0'; b[m] = '\0'; cout << a << endl; cout << n << endl; cout << b << endl; } return 0; }
1017 幂次方
对任意正整数N,求XN%233333的值。
要求运算的时间复杂度为O(logN)。
例如
X30 = X15*X15
X15=X7X7X
X7=X3X3X
X3=XXX
共7次乘法运算完毕。
#include<iostream> using namespace std; const int M = 233333; int main() { long long x, n; long long ans = 1; cin >> x >> n; x %= M; while (n > 0) { if (n%2 == 1) ans = (ans*x) % M; n /= 2; x = (x*x) % M; } cout << ans << endl; return 0; }
1018 击鼓传花
有N个小朋友围成一圈玩击鼓传花游戏,将小朋友编号为1~N,从1号开始传花,每次传3个,拿到花的小朋友表演节目后退出,任给N,问最后一个表演的小朋友编号是多少?
例如:5个小朋友,从1号开始传花,第一个表演的是3号,第二个表演的是1号,第三个表演的是5号,第四个表演的是2号,最后一个表演的是4号。(建议用链表实现)
方法一:数组实现
#include <iostream> #include<algorithm> using namespace std; int a[100] = { 0 }; int main() { int n; cin >> n; int count = 0,i=0; int len = n; while (n>=1) { if (a[i] == 0) count++; if (count == 3) { if (n==1) cout << i + 1; a[i] = 1;//出去 count = 0; n--; } i = (i + 1) % len; //循环数组 } return 0; }
方法二:链表实现
#include <iostream> #include<algorithm> using namespace std; struct Node { int num; struct Node *next; bool f; }; //初始化循环链表 void init(Node *&head,int n) { Node *p, *r; head = new Node; head->num = 1; head->f = true; head->next = NULL; r = head; for (int i = 2; i <= n; i++) { p = new Node; p->num = i; p->f = true; p->next = NULL; r->next = p; r = r->next; } r->next = head;//循环链表 } //击鼓传花 void fun(Node *head, int n) { int cnt = 0; Node *p = head; while (n>0) { if(p->f) cnt++; if (cnt == 3) { if(n==1) cout << p->num << endl; cnt = 0; p->f = false; n--; } p = p->next; } } /* void put(Node *head, int n) { Node *p = head; while (p&&n) { n--; cout << p->num << " "; p = p->next; } } */ int main() { Node *head; int n; cin >> n; init(head, n); fun(head, n); return 0; }
1019 字母频率
从键盘输入一个字符串(可能含有数字、字母、其他可见字符),输出出现频率最高的英文字母及次数,忽略字母的大小写(如大写A和小写a均视为a)。
例如:
输入:There are 10,000 soldiers in the town.
输入:e 5
#include<stdio.h> #include<string.h> int main() { char str[1000]; int s[26]={0}; gets(str); int i=0,max=0; while(i<strlen(str)) { if(str[i]>='a'&&str[i]<='z') s[str[i]-'a']++; else if ((str[i]>='A'&&str[i]<='Z')) s[str[i]-'A']++; i++; } for(i=0;i<26;i++) if(s[max]<s[i]) max=i; printf("%c %d\n",max+97,s[max]); }
1020最长连续因子
输入一个整数,输出其最长连续因子。
例如
输入:60
输出:2 3 4 5 6
#include <iostream> #include<algorithm> using namespace std; int main() { int i, j=0, len=0, temp=0, n,first=0; cin >> n; for (int i = 2; i < n; i++) { if (n%i == 0) { j = i; while(n%j == 0) { temp++; j++; } if (temp > len) { len = temp; first = i; } } temp = 0; } while (len--) { cout << first << " "; first++; } return 0; }
- 点赞
- 收藏
- 分享
- 文章举报
- 九度OJ 1020 最小长方形 (模拟)
- 1020. 月饼 (25)
- POJ 1001 解题报告 高精度大整数乘法模版
- HDUOJ-1001: 计算从1到n的和
- 1020. Tree Traversals (序列建树)
- 1001. A+B Format (20)
- 1001 Sum Problem
- 九度OJ题目1020:最小长方形
- 题目1001: A+B for Matrices
- BestCoder Round#29 1001 GTY's math problem
- 题目1020题 最小长方形 九度Online Judge
- 1001. 害死人不偿命的(3n+1)猜想 (15)
- 【BZOJ】【1001】 【BJOI2006】狼抓兔子
- 杭电1001
- poj1020 搜索
- 赛码1001 Movie(hdu 5214)
- BZOJ 1001 狼追兔子 平面图最大流
- 百度之星程序设计大赛资格赛1001 大搬家
- 1001 求平均年龄
- BZOJ_1001 狼抓兔子