1008
下面这段代码显示部分错误。
#include <stdio.h>
#include <map>
#include <iostream>
#include <stack>
#include <queue>
#include <math.h>
#include <vector>
using namespace std;
int main(){
int sum1,ct1,temp,position,boxin,boxout;
cin>>sum1>>ct1;
vector <int> vc;
int ct = ct1;
int ct2 = ct1;
int sum = sum1;
while(sum1--){
cin>>temp;
vc.push_back(temp);
}
ct--;
while(ct>=0){
int i = ct;
int loop = sum/ct2;
boxin = vc[ct];
while(loop--){
position = (i+ct2)%sum;
boxout = vc[position];
vc[position] = boxin;
boxin = boxout;
i = position;
}
ct--;
}
bool flag = false;
for(int j=0;j<vc.size();j++){
if (flag){
cout<<' ';
}
flag = true;
cout<<vc[j];
}
return 0;
}
下面这段代码来自https://blog.csdn.net/Aldo101/article/details/79516499
#include <cstdio>
const int MAXN = 110;
int gcd(int a,int b) // 求最大公约数
{
if(b == 0) return a;
else return gcd(b, a%b);
}
int main()
{
int N, M, iInput[MAXN];
while(~scanf("%d%d",&N, &M))
{
for(int i = 0;i < N;i++)
{
scanf("%d",&iInput[i]);
}
M %= N;
if(M != 0)
{
int d = gcd(N, M);
for(int i = N - M;i <= N - M + d - 1;i++)
{
int temp = iInput[i]; //记录temp变量;
int pos = i, next; // pos为此时此刻正在处理的变量,即为空缺位, next为将要和空缺位进行交换的位置
do
{
next = (pos - M + N) % N; //计算将要进行交换的位置 ,加N是如果移动到数组小于M的位置时再从右边开始
if(next == i) //如果回到了初始位置
iInput[pos] = temp;
else
iInput[pos] = iInput[next]; //如果下一个位置不是初始位置,那么将下一个位置的数字填入空缺位
pos = next; // 继续下一个位置
} while(pos != i);
}
}
for(int i = 0;i < N;i++)
{
printf("%d%c",iInput[i], (i != N - 1)?' ':'\n');
}
}
return 0;
}
总结陈词
1、关注最大公约数求法
1009
#include <stdio.h>
#include <map>
#include <iostream>
#include <stack>
#include <queue>
#include <math.h>
#include <vector>
#include <string>
using namespace std;
int main(){
string st;
getline(cin, st);
stack <char> qu;
for(int i=st.size()-1;i>=0;i--){
if (st[i]!=' '){
qu.push(st[i]);
}
else{
while(!qu.empty()){
cout<<qu.top();
qu.pop();
}
cout<<' ';
}
}
while(!qu.empty()){
cout<<qu.top();
qu.pop();
}
return 0;
}
总结陈词
1、如果想读取一段带有空格的String,使用
string st; getline(cin, st);
1010
下面这段代码显示部分错误,不知道原因
#include <stdio.h>
#include <map>
#include <iostream>
#include <stack>
#include <queue>
#include <math.h>
#include <vector>
#include <String>
using namespace std;
int main(){
string st;
int blankcount = 0;
vector <int> vc;
vector <int> result;
int c;
cin>>c;
vc.push_back(c);
while(cin.get()!='\n'){
cin>>c;
vc.push_back(c);
}
for (int i=0;i<vc.size();i+=2){
result.push_back(vc[i]*vc[i+1]);
result.push_back(vc[i+1]-1);
}
for (int i=0;i<result.size();i++){
if (result[i]!=0){
cout<<result[i];
if(i!=result.size()){cout<<' ';}
}
else{
cout<<result[i];
break;
}
}
return 0;
}
参考网上解析,发现边循环边输出才能正确通过,不解
#include<iostream>
using namespace std;
int main()
{
int a,b;
bool flag = true;
while(cin>>a>>b)
{
if(b==0)
break;
if(!flag)
cout<<" ";
else
flag=false;
cout<<a*b<<" "<<b-1;
}
if(flag)
cout<<"0 0";
return 0;
}