目录
10. 多组测试数据,每个测试实例包括2个整数M,K (2<=k<=M<=1000)。M=0,K=0代表输⼊结束。
⭕11. 多组测试数据,⾸先输⼊⼀个整数N,接下来N⾏每⾏输⼊两 个整数a和b, 读取输⼊数据到Map
⭕12. 多组测试数据。每组输⼊⼀个整数n,输出特定的数字图形
13. 多⾏输⼊,每⾏输⼊为⼀个字符和⼀个整数,遇到特殊字符 结束
10. 多组测试数据,每个测试实例包括2个整数M,K (2<=k<=M<=1000)。M=0,K=0代表输⼊结束。
练习题 10. 运营商活动
注意:第三组数据「13 3」结果为什么是19呢, 13/3=4,获得4元奖励。 13%3=1,还剩下1元,4+1=5,5元继续参加奖励规则。 5/3=1,获得1元奖励。 5%3=2,剩下2元,1+2=3,3元继续参与奖励规则。 3/3=1,获得1元奖励。 3%3=0,剩下0元,1+0=1。 1元不能参与剩下奖励。所以一共可以使用的天数是 13+4+1+1=19
题目 是这么说的,虽然感觉这样的送法,很逆天😳
错误:
#include<bits/stdc++.h>
using namespace std;int main()
{int m=0,k=0;while(cin>>m>>k){if(m==0 && k==0) break;int ret=m;int a=m/k,b=m%k;while(a!=0 || b!=0){m=a+b;a=m/k;b=m%k;ret+=a;}cout<<ret<<endl;}return 0;
}
正确:
清晰表示:
- //3个变量
- //余额 天数 优惠计数
#include<bits/stdc++.h>
using namespace std;int main()
{int m=0,k=0;while(cin>>m>>k){if(m==0 && k==0) break;int days=0,cons=0;while(m>0){m--;days++;cons++;if(cons%k==0){m++;cons=0;//重新计数}}cout<<days<<endl;//3个变量//余额 天数 优惠计数}return 0;
}
⭕11. 多组测试数据,⾸先输⼊⼀个整数N,接下来N⾏每⾏输⼊两 个整数a和b, 读取输⼊数据到Map
练习题 11. 共同祖先
输入输出:
- // 关系链
#include<iostream>
#include<vector>
using namespace std;
int main() {int n, a, b;vector<int> nums(30, 0); // 使⽤数组来记录映射关系,初始化为0while (cin >> n) {while (n--) {cin >> a >> b;nums[a] = b; // 记录映射关系}}
}
正确代码:
注意 父子辈:deprh 大的 是子辈
#include<bits/stdc++.h>
using namespace std;
int dm=0,dy=0;void solve(unordered_map<int,int>& hash)
{dm=0,dy=0;//重置int i=1;while(hash.count(i)){i=hash[i];dm++;}int j=2;while(hash.count(j)){j=hash[j];dy++;}}int main()
{int n=0;while(cin>>n){unordered_map<int,int> hash;int a,b;while(n--){cin>>a>>b;hash[a]=b;}solve(hash);if(dy>dm)cout<<"You are my younger"<<endl;else if(dy==dm)cout<<"You are my brother"<<endl;elsecout<<"You are my elder"<<endl;}return 0;
}
⭕12. 多组测试数据。每组输⼊⼀个整数n,输出特定的数字图形
输入输出
#include<iostream>
#include<vector>
using namespace std;
void printTopPart(int n)
{for (int i = 1; i <= n; i++) {// 打印空格for (int j = 1; j <= n - i; ++j) {cout << " ";}// 打印递增数字for (int j = 1; j <= i; j++) {cout << j;}// 打印递减数字for (int j = i - 1; j >= 1; j--) {cout<<j;}cout<<endl;}
}int main()
{int n;while(cin>>n){if(n<1 || n>9)cout<<"unknow"<<endl;printTopPart(n);}return 0;
}
完整代码
#include<iostream>
#include<vector>
using namespace std;
void printTopPart(int n)
{for (int i = 1; i <= n; i++) {// 打印空格for (int j = 1; j <= n - i; ++j) {cout << " ";}// 打印递增数字for (int j = 1; j <= i; j++) {cout << j;}// 打印递减数字for (int j = i - 1; j >= 1; j--) {cout<<j;}cout<<endl;}
}void printEndPart(int n)
{for (int i = n-1; i >= 1; i--)
// 注意反序 整个符号逻辑的翻转{// 打印空格for (int j = 1; j <= n - i; ++j) {cout << " ";}// 打印递增数字for (int j = 1; j <= i; j++) {cout << j;}// 打印递减数字for (int j = i - 1; j >= 1; j--) {cout<<j;}cout<<endl;}
}int main()
{int n;while(cin>>n){if(n<1 || n>9)cout<<"unknow"<<endl;printTopPart(n);printEndPart(n);}return 0;
}
13. 多⾏输⼊,每⾏输⼊为⼀个字符和⼀个整数,遇到特殊字符 结束
练习题 13. 镂空三⻆形
输入输出
int main() {char c;int n;while(cin >> c){if(c == '@')break;cin >> n;myprint(c, n); //函数输入输出的 解决}return 0;
}
代码
- i 为行
- j 为列
- 初始都为 1
#include<bits/stdc++.h>
using namespace std;void solve(char c,int n)
{for(int i=1;i<=n;i++){if(i==n){for(int j=1;j<=2*n-1;j++)cout<<c;cout<<endl;return;}for(int j=1;j<=n-i;j++)cout<<" ";if(i==1){cout<<c<<endl;continue;}cout<<c;for(int j=1;j<=i*2-3;j++)cout<<" ";cout<<c<<endl;}
}int main()
{char c;int n;while(cin>>c>>n){if(c=='@') return 0;solve(c,n);cout<<endl;}return 0;
}