001:Hello World(5 分)(AC)
注意要点:无。
#include
using namespace std;
int main(){
printf("Hello World!");
return 0;
}
002:打印沙漏(20 分)(AC)
注意要点:
1.这个题麻烦的地方就是数学问题,需要考虑打印的字符和空格的字符。
2.其次是就是奇数偶数的问题,这个一开始我也没有想到。
#include
#include
using namespace std;
int main() {
int N;
char c;
scanf("%d %c" , &N , &c);
//基本操作:设底边拥有字符数为 x , 先需要求出基本实现需要多少个字符//
int b = (int)sqrt(2.0 * (1 + N)) - 1;
if(b % 2 == 0) b --;
int sum = (1 + b) * (1 + b) / 2 - 1;
//倒三角打印//
for(int i = b ; i > 0 ; i -= 2){
for(int j = 0 ; j < (b - i) / 2 ; j ++) {
printf(" ");
}
for(int j = 0 ; j < i ; j ++) {
printf("%c" , c);
}
printf("\n");
}
//正三角打印//
for(int i = 3 ; i <= b ; i += 2) {
for(int j = 0 ; j < (b - i) / 2 ; j ++) {
printf(" ");
}
for(int j = 0 ; j < i; j ++) {
printf("%c" , c);
}
printf("\n");
}
//求剩余数//
printf("%d" , N - sum);
return 0;
}
#include
#include
int main(){
char a[1001];
gets(a);
int b[10]={0};
for(int i=0;i
003:个位数统计(15 分)(AC)
注意要点:无。
#include
#include
int main(){
char a[1001];
gets(a);
int b[10]={0};
for(int i=0;i
004:个位数统计(15 分)(AC)
注意要点:无。
#include
#include
int main(){
char a[1001];
gets(a);
int b[10]={0};
for(int i=0;i
005:考试座位号(15 分)(AC)
注意要点:无。
#include
using namespace std;
struct st{
char a[15];
int b ;
int c;
}s[1005];
int main() {
int N , M;
int d;
scanf("%d" , &N);
for(int i = 0 ; i < N ; i ++) {
scanf("%s %d %d" , s[i].a , &s[i].b , &s[i].c);
}
getchar();
scanf("%d" , &M);
for(int i = 0 ; i < M ; i ++) {
scanf("%d" , &d);
for(int j = 0 ; j < N ; j ++) {
if(s[j].b == d) {
printf("%s %d\n" , s[j].a , s[j].c);
}
}
}
return 0;
}
006:连续因子 (20 分)(AC)
参考,真的不会。
这个思路我反正很难想到。我本来在考虑这样做会不会超时啊,这个while(1)连个变都没有。发现还是我想多了。
特别注意这个地方的i - j + 1.
#include
#include
#include
using namespace std;
typedef long long LL;
int main(){
LL n;
scanf("%lld" , &n);
LL sqr = (LL)sqrt(1.0 * n) , ansI = 0 , ansLen = 0;//ansI为对应的第一个整数,而ansLen最长的连续整数长度//
for(LL i = 2 ; i <= sqr ; i ++){
LL temp = 1 , j = i;
while(1){//从这里开始先尝试从i开始最长的序列是多少//
temp *= j;//temp记录每次完后的乘积//
if(n % temp != 0)//看看能不能整除,不能的话就退出//
break;
if(j - i + 1 > ansLen){//看看目前的最长的长度是不是超过了这个的最长的长度//
ansI = i;//更新一下下标//
ansLen = j - i + 1;//ansLen的长度也同样更新//
}
j ++;//j往前移//
}
}
if(ansLen == 0){
printf("1\n%lld" , n);
}
else{
printf("%lld\n" , ansLen);
for(LL i = 0 ; i < ansLen ; i ++){
printf("%lld" , ansI + i);//向后移动//
if(i < ansLen - 1){
printf("*");
}
}
}
return 0;
}
007:念数字(10 分)(AC)
注意要点:无。
#include
#include
using namespace std;
int main() {
char a[10][5]= {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
char b[100];
scanf("%s", b);
int len = strlen(b);
//正数负数分开计算//
//负数//
if(b[0] == '-'){
printf("fu ");
for(int i = 1 ; i < len ; i ++) {
if(i == len - 1)
printf("%s" , a[b[i] - '0']);
else
printf("%s " , a[b[i] - '0']);
}
}
//正数//
else {
for(int i = 0 ; i < len ; i ++) {
if(i == len - 1)
printf("%s" , a[b[i] - '0']);
else
printf("%s " , a[b[i] - '0']);
}
}
return 0;
}
009:N个数求和(20 分)(AC)
注意要点:
分数做的时候都要注意0的问题。分数在操作的时候都是分开分子和分母操作的。
#include
using namespace std;
int suma = 0 , sumb = 1;
int gcd(int a , int b) {
if(b == 0) return a;
else gcd(b , a % b);
}
int main() {
int N , a , b , c, d ;
scanf("%d" , &N);
for(int i = 0 ; i < N ; i ++) {
scanf("%d/%d" , &a , &b);
int c = gcd(sumb , b);
//最小公倍数//
int d = sumb / c * b;
//分子相加//
suma = d/ sumb * suma;
a = d / b * a;
//分母相乘//
sumb = d ;
suma += a;
c = gcd(suma , sumb);
suma = suma / c;
sumb = sumb / c;
}
//负数变成正数//
if(suma < 0){
printf("-");
suma *= -1;
}
//拆分分数//
if(suma > sumb) {
int e = suma / sumb ;
suma = suma % sumb ;
if(suma == 0) {
printf("%d" , e);
}
else{
printf("%d %d/%d" , e , suma , sumb);
}
}
else {
if(suma == 0) printf("0");
else
printf("%d/%d" , suma , sumb);
}
return 0;
}
011:A-B(20 分)(AC)
注意要点:getline可以放int数组进去。
#include
using namespace std;
int main() {
string a , b;
int ch[128] = {0};
getline(cin , a);
getline(cin , b);
for(int i = 0 ; i < b.length() ; i ++) {
ch[b[i]] = 1; //getline的数值可以直接放入int数组中。//
}
for(int i = 0 ; a[i] != '\0' ; i ++) {
if(ch[a[i]] != 1)
printf("%c" , a[i]);
}
printf("\n");
return 0;
}
012:计算指数(5 分)(AC)
注意要点:0,1,2。
#include
#include
using namespace std;
int main() {
int N , b = 2;
scanf("%d" , &N);
int sum = N;
//0//
if(N == 0)
printf("2^0 = 1");
//1//
else if(N == 1)
printf("2^1 = 2");
//其他//
else{
for(int i = 0 ; i < N - 1 ; i ++) {
b *= 2;
}
printf("2^%d = %d" , sum , b);
}
return 0;
}
013:计算阶乘和(10 分)(AC)
#include
using namespace std;
int ispow(int N) {
for(int i = N - 1 ; i >= 1 ; i --) {
N *= i;
}
return N;
}
int main() {
int N;
int sum = 0;
scanf("%d" , &N);
for(int i = 1 ; i <= N ; i ++) {
sum += ispow(i);
}
printf("%d" , sum);
return 0;
}
015:跟奥巴马一起画方块(15 分)(AC)
注意要点:
1.这个题目需要手动四舍五入。
#include
using namespace std;
int main() {
int N , n;
char a ;
scanf("%d %c" , &N , &a);
//手动四舍五入//
if(N % 2 == 0) n = N / 2;
else n = N / 2 + 1;
//输出//
for(int i = 1 ; i <= n ; i ++) {
for(int j = 1 ; j <= N ; j ++) {
printf("%c" , a);
}
printf("\n");
}
return 0;
}
016:查验身份证 (15 分)(AC)
注意要点:这次比上次写的聪明了,可以直接开一个Z的数组直接判断。
#include
using namespace std;
int M[18] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char Z[15] = {'1' , '0' , 'X' , '9' , '8' , '7' , '6' , '5' , '4' , '3' , '2'};
int main(){
int n;
bool flag = true;
char s[20];
scanf("%d" , &n);
for(int i = 1 ; i <= n ; i ++){
getchar();
int sum = 0;
scanf("%s" , s);
for(int i = 0 ; i < 17 ; i ++){
sum += (s[i] - '0') * M[i];
}
if(Z[sum % 11] != s[17]){
printf("%s\n" , s);
flag = false;
}
}
if(flag == true){
printf("All passed");
}
return 0;
}
017:到底有多二(15 分)(AC)
注意要点:
1.就是注意一下百分数怎么写就行。
2.其次是注意一下先 ÷ 后 × ,万一会爆。这个题倒是没什么。
#include
#include
using namespace std;
int main() {
char a[55];
int is_minus = 0 , len = 0;
float num2 = 0;
scanf("%s" , a);
//求位数//
if(a[0] == '-'){
len = strlen(a) - 1 ;
is_minus = 1;
}
else
len = strlen(a) ;
//求2的个数//
for(int i = 0 ; i < strlen(a) ; i ++) {
if(a[i] - '0' == 2)
num2 ++;
}
//判断是否是负数//
if(is_minus == 1)
num2 = num2 * 1.5 ;
//判断是否是偶数//
if(a[strlen(a) - 1] % 2 == 0)
num2 = num2 * 2 ;
printf("%.2f%%" , num2 * 100 / len); //注意写法。//
return 0;
}
020:帅到没朋友(20 分)(AC)
注意要点:
1.注意那个点,几乎题目上的所有信息都会有用。
#include
using namespace std;
int main() {
//input//
int N , n , a , b , c ;
int count = 0 ;
int ch[100005] = { 0 };
int sh[100005] = { 0 };
scanf("%d" , &N);
for(int i = 1 ; i <= N ; i ++) {
scanf("%d" , &a);
for(int j = 0 ; j < a ; j ++) {
scanf("%d" , &b);
if(a == 1 && ch[b] == 0) ch[b] = -2;//非常要命的一个点//
else ch[b] = i ;
}
}
//mark//
scanf("%d" , &n);
for(int i = 0 ; i < n ; i ++) {
scanf("%d" , &c);
if(ch[c] == 0 || ch[c] == -2){
ch[c] = -1;
sh[count ++] = c;
}
}
//output//
if(count == 0) {
printf("No one is handsome");
}
else {
for(int i = 0 ; i < count ; i ++) {
if(i == count - 1) {
printf("%05d" , sh[i]);
}
else{
printf("%05d " , sh[i]);
}
}
}
return 0;
}
021:重要的话说三遍(5 分)(AC)
注意要点:无。
#include
using namespace std;
int main() {
printf("I'm gonna WIN!\nI'm gonna WIN!\nI'm gonna WIN!");
return 0;
}
022:奇偶分家(10 分)(AC)
注意要点:无。
#include
using namespace std;
int main() {
int n , sum1 = 0 , sum2 = 0;
int a[1005] = {0};
scanf("%d" , &n);
for(int i = 0 ; i < n ; i ++) {
scanf("%d" , &a[i]);
if(a[i] % 2 == 0) {
sum1 ++;
}
else {
sum2 ++;
}
}
printf("%d %d" , sum2 , sum1);
return 0;
}
023:输出GPLT(20 分)(AC)
注意要点:无。
#include
using namespace std;
int main() {
char a;
int st[4] = {0} ;
int min = 10005 , max = -1;
while(scanf("%c" , &a) == 1) {
//统计gplt的数值//
if(a == 'G' || a == 'g') st[0] ++;
if(a == 'P' || a == 'p') st[1] ++;
if(a == 'L' || a == 'l') st[2] ++;
if(a == 'T' || a == 't') st[3] ++;
}
//查看哪个数值最少,那个数值最多//
for(int i = 0 ; i < 4 ; i ++) {
if(st[i] < min) {
min = st[i];
}
if(st[i] > max){
max = st[i];
}
}
//更新st的数值//
for(int i = 0 ; i < 4 ; i ++) {
st[i] -= min ;
}
//输出短板//
for(int i = 0 ; i < min ; i ++) {
printf("GPLT");
}
//输出剩余的数值//
for(int i = 0 ; i < max ; i ++) {
if(st[0] != 0) {
printf("G");
st[0] --;
}
if(st[1] != 0) {
printf("P");
st[1] --;
}
if(st[2] != 0) {
printf("L");
st[2] --;
}
if(st[3] != 0) {
printf("T");
st[3] --;
}
}
return 0;
}
024:后天(5 分)
注意要点:无。
#include
using namespace std;
int main() {
int N;
scanf("%d" , &N);
if(N == 6)
printf("1");
else if(N == 7)
printf("2");
else
printf("%d" , N + 2);
return 0;
}
026:I Love GPLT(5 分)(AC)
注意要点:最要命的就是这个空格。printf 中可以直接输出空格。
#include
using namespace std;
int main() {
printf("I\n\ \nL\no\nv\ne\n \nG\nP\nL\nT");
return 0;
}
027:出租(20 分)(AC)
注意要点:无。
#include
using namespace std;
int main() {
int i = 0 , count = 0;
char a;
int num[11] = { 0 } , judge[11] = { 0 };
int phone[12];
//统计数字//
while(scanf("%c" , &a) == 1) {
num[a - '0'] ++;
phone[i ++] = (a - '0');
}
//统计非0个数 , 录入judge信息//
for(int i = 9 ; i >= 0 ; i --) {
if(num[i] != 0) {
judge[i] = count ++;
}
}
//输出第一行//
printf("int[] arr = new int[]{");
for(int i = 9 ; i >= 0 ; i --){
if(num[i] != 0) {
printf("%d" , i);
count --;
if(count != 0) printf(",");
}
}
printf("};\n");
//输出第二行//
printf("int[] index = new int[]{");
for(int i = 0 ; i < 11 ; i ++) {
if(i == 10)
printf("%d};" , judge[phone[i]]);
else
printf("%d," ,judge[phone[i]]);
}
return 0;
}
028:判断素数(10 分)(AC)
注意要点:
1.逐渐要学会使用bool类型来判断值。bool数值不受影响,该干嘛干嘛。
#include
#include
using namespace std;
bool isprime(int a) {
if(a <= 1 ) return false;
int sqr = (int)sqrt(1.0 * a);
for(int i = 2 ; i <= sqr ; i ++) {//这个地方注意,已经这个地方已经开过了//
if(a % i == 0)
return false;
}
return true;
}
int main() {
int N , a;
scanf("%d" , &N);
for(int i = 0 ; i < N ; i ++) {
scanf("%d" , &a);
if(isprime(a) == 1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
029:是不是太胖了(5 分)(AC)
注意要点:无。
#include
using namespace std;
int main() {
float N;
scanf("%f" , &N);
printf("%.1f" , (N - 100) * 1.8);
return 0;
}
030:一帮一 (15 分)(AC)
注意要点:
1.新的技巧,遇到题目的时候不要慌张,冷静分析题目,可以画一画图 + 写伪代码。
#include
using namespace std;
int main() {
int N;
char name[10][55];
int G[55];
bool judge[55] = { 0 };
scanf("%d" , &N);
for(int i = 0 ; i < N ; i ++) {
scanf("%d %s" , &G[i] , name[i]);
getchar();
}
int i = 0 , j = N - 1;
while(1){
if(i > j) {
break;
}
//如果两个相同//
if(G[i] == G[j] || judge[j] == 1){
j --;
continue;
}
//不相同且未配对//
if(G[i] != G[j] && judge[i] == 0 && judge[j] == 0){
printf("%s %s\n" , name[i] , name[j]);
judge[i] = 1;
judge[j] = 1;
i ++;
j = N - 1;
continue;
}
}
return 0;
}
031:到底是不是太胖了(10 分)(AC)
注意要点:
1.注意这个地方的输入要改成float,尤其是涉及到 % 的时候。
#include
#include
using namespace std;
int main() {
int N ;
float a , b;
scanf("%d" , &N);
for(int i = 0 ; i < N ; i ++) {
scanf("%f %f" , &a , &b);
float standard = (a - 100) *0.9;
//先看哪一个大//
if(( (b / 2) > standard )&& (b / 2 - standard) >= standard * 0.1){
printf("You are tai pang le!\n");
}
else if(( (b / 2 ) < standard )&& (standard - b / 2) >= standard * 0.1){
printf("You are tai shou le!\n");
}
else {
printf("You are wan mei!\n");
}
}
return 0;
}
032:Left-pad(20 分)(AC)
注意要点:
1.这个 string 数据从0开始。
2.substr(pos , len),pos 的数值是下标 ,len 是截的长度。string.length() 的用法有点像strlen 的用法。
#include
#include
using namespace std;
int main() {
int N ;
char a;
string b;
scanf("%d %c" , &N , &a);
getchar();
getline(cin , b);
//判断给定的数字和长度的对比大小//
if(N > b.length()){
for(int i = 0 ; i < N - b.length() ; i ++) {
printf("%c" , a);
}
cout << b <
033:出生年(15 分)(AC)
注意要点:
1.当个数小于3位数的时候,要把0压入集合中。
#include
#include
using namespace std;
set s;
//压入集合中//
void put_set(int year) {
int count = 0;
s.clear();
while(year != 0) {
int a = year % 10 ;
s.insert(a);
year = year / 10;
count ++;
}
if(count == 1 || count == 2 || count == 3)
s.insert(0);
}
//判断个数是否一致//
int judge(int year , int n) {
put_set(year);
if(s.size() == n)
return 1;
else return 0;
}
int main() {
int year , n , age = 0;
scanf("%d %d" , &year , &n);
//统计年龄//
while(judge(year , n) == 0){
year ++;
age ++;
}
printf("%d %04d" , age , year);
return 0;
}
034:点赞(20 分)(AC)
注意要点:
1.搜索的时候可以使用 “剪枝”。降低搜索的量。
#include
#include
using namespace std;
int main() {
int N , a , b , max = -1;
int s[1005] = { 0 };
scanf("%d" , &N);
//输入//
for(int i = 0 ; i < N ; i ++) {
scanf("%d" , &a);
for(int j = 0 ; j < a ; j ++) {
scanf("%d" , &b);
//缩减搜索量//
if(max < b)
max = b;
s[b] ++;
}
}
int max1 = -1;
int t = -1;
//可以直接从max开始搜索//
for(int i = max ; i >= 1 ; i --) {
if(max1 < s[i]){
max1 = s[i];
t = i;
}
}
printf("%d %d" , t , max1);
return 0;
}
035:L1-035 情人节 (15 分)(AC)
注意要点:
1.scanf 在输入的时候会出现不能输入空格的情况。所以还得改成 string 输入。
#include
using namespace std;
int main() {
string s , a , b;
int num = 0;
while(cin >> s) {
if(s[0] == '.')
break;
num ++;
if(num == 2){
a = s;
}
if(num == 14){
b = s;
}
}
if(num >= 14)
cout << a <<" and "<< b <<" are inviting you to dinner..."<< endl;
if(num >=2 && num < 14){
cout << a <<" is the only one for you..."<< endl;
}
if(num < 2){
cout << "Momo... No one is for you ..." << endl;
}
return 0;
}
036:L1-036 A乘以B (5 分)(AC)
注意要点:无。
#include
using namespace std;
int main() {
int a , b;
scanf("%d %d" , &a , &b);
printf("%d" , a * b);
return 0;
}
037: A除以B(10 分)(AC)
注意要点:无。
#include
int main()
{
int A,B;
float C;
scanf("%d%d",&A,&B);
if(A>=-100&&A<=100&&B>=-100&&B<=100)
{C=(float)A/B;
if(B>0)
printf("%d/%d=%.2f\n",A,B,C);
else
if(B<0)
printf("%d/(%d)=%.2f\n",A,B,C);
else
printf("%d/0=Error\n",A);}
}
038:新世界(5 分)(AC)
注意要点:无。
#include
using namespace std;
int main() {
printf("Hello World\nHello New World");
return 0;
}
039:古风排版 (20 分)(AC)
注意要点:
1.这个题目唯一可以注意的地方就是关于这个矩阵行列的问题。
#include
#include
using namespace std;
int main() {
int N;
string a;
char s[105][105];
scanf("%d" , &N);
getchar();
getline(cin , a);
//这个是一个输入的模式//
int m = a.size() / N;
if(a.size() % N != 0) m ++;
int k = 0 ;
for(int i = m - 1 ; i >= 0 ; i --) {
for(int j = 0; j < N ;j ++) {
if(k < a.size())
s[j][i] = a[k ++];
else
s[j][i] = ' ';
}
}
for(int i = 0 ; i < N ; i ++) {
for(int j = 0 ; j < m ;j ++) {
printf("%c" , s[i][j]);
}
printf("\n");
}
return 0;
}
040:最佳情侣身高差(10 分)
注意要点:
1.getchar(),这个点注意,一旦有 %c 输入的时候必须小心有 getchar 。
2.注意那种一个做一次输出的题目,记得加回车。
#include
using namespace std;
int main() {
int N ;
float b;
char a;
scanf("%d" , &N);
getchar();
for(int i = 0 ; i < N ; i ++) {
scanf("%c %f" , &a , &b);
getchar();
if(a == 'M')
printf("%.2f\n" , b / 1.09);
else
printf("%.2f\n" , b * 1.09);
}
return 0;
}
041:寻找250(10 分)(AC)
注意要点:
1.这个的数字给的太弱了。这个题目是暴力做的,一旦数字超大直接就爆了,建议还是使用无限输入。
#include
using namespace std;
int main() {
int a , i;
for(i = 1 ; i < 100000 ; i ++) {
scanf("%d" , &a);
if(a == 250)
break;
}
printf("%d" , i);
return 0;
}
042:日期格式化(5 分)(AC)
注意要点:无。
#include
using namespace std;
int main() {
int a , b , c;
scanf("%d-%d-%d" , &a , &b , &c);
printf("%04d-%02d-%02d" , c , a , b);
return 0;
}
044:稳赢(15 分)(AC)
注意要点:
1.注意count 的位置。这个题目的count 的位置就是为了 count = 1 的问题。
#include
#include
using namespace std;
int main() {
int N , count = 0;
char a[15];
scanf("%d" , &N);
getchar();
while(scanf("%s" , a) == 1) {
//输出End退出//
if(strcmp(a , "End") == 0)
break;
//先行一步//
count++;
if(count > N){
if(a[0] == 'C') printf("ChuiZi\n");
if(a[0] == 'J') printf("JianDao\n");
if(a[0] == 'B') printf("Bu\n");
count = 0;
}
else{
if(a[0] == 'C') printf("Bu\n");
if(a[0] == 'J') printf("ChuiZi\n");
if(a[0] == 'B') printf("JianDao\n");
}
}
return 0;
}
045:宇宙无敌大招呼(5 分)(AC)
注意要点:无。
#include
using namespace std;
int main() {
char a[10];
scanf("%s" , a);
printf("Hello %s" , a);
return 0;
}
046:整除光棍 (20 分)(AC)
注意要点:
1.这个是模拟除法的一个微型例子,其实理解起来不是很难。
#include
using namespace std;
int main() {
int N , s = 0 , n = 0;
scanf("%d" , &N);
//先给个初始的数值先计算的//
while(s < N) {
s = s * 10 + 1 ;
n ++;
}
//模拟除法//
while(1) {
printf("%d" , s / N);
s = s % N;
if(s == 0) break;
s = s * 10 + 1 ;
n ++;
}
printf(" %d\n" , n);
return 0;
}
047:装睡(10 分)(AC)
注意要点:无。
#include
using namespace std;
int main() {
int N;
char a[10];
int b , c;
scanf("%d" , &N);
for(int i = 0 ; i < N ; i ++){
scanf("%s %d %d" , a , &b , &c);
if(b < 15 || b > 20 || c < 50 || c > 70){
printf("%s\n" , a);
}
}
return 0;
}
048:矩阵A乘以B (15 分)(AC)
注意要点:
1.思路很清晰。注意这个连续求和的环节。
#include
using namespace std;
int main() {
int n , m;
int x , y;
int a[200][200] , b[200][200];
//输入//
scanf("%d %d" , &m , &n);
for(int i = 0 ; i < m ; i ++) {
for(int j = 0 ; j < n ; j ++) {
scanf("%d" , &a[i][j]);
}
}
scanf("%d %d" , &x , &y);
for(int i = 0 ; i < x ; i ++) {
for(int j = 0 ; j < y ; j ++) {
scanf("%d" , &b[i][j]);
}
}
if(n != x) {
printf("Error: %d != %d" , n , x);
}
else{
printf("%d %d\n" , m , y);
for(int i = 0 ; i < m ; i ++) {
for(int j = 0 ; j < y ; j ++) {
int sum = 0 ;
//这个是一个连续求和的环节。//
for(int k = 0 ; k < n ; k ++) {
sum += a[i][k] * b[k][j];
}
if(j == y - 1){
printf("%d\n" , sum);
}
else{
printf("%d " , sum);
}
}
}
}
return 0;
}
049:天梯赛座位分配(20 分)(AC)
注意要点:
1.这个题可以说是20分里面比较麻烦的了。一开始题都看不懂,后来突然想到使用 vector , 但还是卡住了,看了看其他大神的代码才明白这个是什么意思。有点头晕。尤其是第二部分真的很巧妙。这个题目值得二刷。
#include
#include
using namespace std;
vector s[100];
int main() {
int N , sum = 0;
int a[105] ;//每个里面的数字有多少个//
bool b[105] = { 0 };//标记是否超过了,还访问不访问//
//输入//
scanf("%d" , &N);
for(int i = 1 ; i <= N ; i ++) {
scanf("%d" , &a[i]);
a[i] *= 10;
sum += a[i];
}
//把数字分开装//
int num = 0;
int c = 1;
while(num < N){//?//
for(int i = 1 ; i <= N ; i ++) {
if(s[i].size() < a[i]){
s[i].push_back(c);
if(num == N - 1)
c += 2;//隔位而坐//
else
c ++;
}
if(a[i] == s[i].size() && b[i] == 0) {
num ++;
b[i] = 1;
}
}
}
//分开输出//
for(int i = 1 ; i <= N ; i ++) {
printf("#%d\n" , i);
int count = 0 ;
for(int j = 0 ; j < s[i].size() ; j ++) {
count ++;
if(count % 10 == 0) {
printf("%d\n" , s[i][j]);
}
else
printf("%d " , s[i][j]);
}
}
return 0;
}
050:倒数第N个字符串 (15 分)(AC:vector )
注意要点:倒着输出比较简单啊。
#include
#include
using namespace std;
vector v;
int main(){
int n , m , sum = 1;
scanf("%d %d" , &n , &m);
for(int i = 0 ; i < n ; i ++){//求最大值//
sum *= 26;
}
m = sum - m;//存正数//
while(m > 0){//存入vector//
v.push_back(m % 26);
m = m / 26;
}
if(v.size() != n){//补齐0//
int k = v.size();//记录一下完成之后的v的大小//
for(int i = 0 ; i < n - k; i ++){
v.push_back(0);
}
}
for(int i = v.size() - 1 ; i >= 0 ; i --){
printf("%c" , 'a' + v[i]);
}
return 0;
}
051:打折(5 分)(AC)
注意要点:无。
#include
using namespace std;
int main() {
float a;
int b;
scanf("%f %d" , &a , &b);
printf("%.2f" , a * b * 0.1);
return 0;
}
052:2018我们要赢(5 分)(AC)
注意要点:无。
#include
using namespace std;
int main(){
printf("2018\nwo3 men2 yao4 ying2 !");
return 0;
}
053: 电子汪(10 分)(AC)
注意要点:无。
#include
using namespace std;
int main() {
int a , b;
scanf("%d %d" , &a , &b);
for(int i = 0 ; i < a + b ; i ++) {
printf("Wang!");
}
return 0;
}
055:谁是赢家(10 分)(AC)
注意要点:无。
#include
using namespace std;
int main() {
int a , b , c , d , e ;
scanf("%d %d" , &a , &b);
scanf("%d %d %d" , &c , &d , &e);
int sum = c + d + e;
//甲胜利条件//
if(a > b && sum <= 2)
printf("The winner is a: %d + %d" , a , 3 - sum);
else if(a < b && sum == 0)
printf("The winner is a: %d + %d" , a , 3);
//乙胜利条件//
else if(a < b && sum >= 1)
printf("The winner is b: %d + %d" , b , sum);
else if(a > b && sum == 3)
printf("The winner is b: %d + %d" , b , 3);
return 0;
}