这个题一定要认真写,如果第一遍读不懂可以多读几遍,或者第二天再读
因为这个题的方法特别好
#include <iostream> using namespace std; int main() { int t; cin >> t; while (t--) { int n, s, r, sum; cin >> n >> s >> r; cout << s - r << " "; while (--n) { sum = r / n; cout << sum << " "; r -= sum; } cout << endl; } return 0; }
下面的方法是我朋友写的,我十分感谢他😊
他的方法应该是
#include<iostream> using namespace std; int main() { int t; cin >> t; while(t--) { int n,s,r; cin >> n >> s >> r; int max = s - r; int a[60]; a[0] = max; int num = n-2; for(int i = 1;i < n;i++) { if(r > num + max) { a[i] = max; } else if(r > num) { a[i] = r - num; } else { a[i] = 1; } num--; r = r - a[i]; } for(int i=0;i<n;i++) { cout << a[i] << " "; } cout << endl; } return 0; }
这是一道用是数学方法解决的题
这个题的算法标签是 进位制
规律 % /% /% /% /% ……
代码
#include <iostream> using namespace std; const int N = 100010; int a[N]; int main() { int n,m; cin>>n>>m; for (int i = 0; i < n; i ++ ) { cin>>a[i]; } for (int i = 0; i < n; i ++ ) { cout<<m%a[i]<<' '; m/=a[i]; } return 0; }