害死人不償命的(3n+1)猜想(卡拉茲幻想)
#include<cstdio>
int divide(int n){
//while循環不能定義在divide
if(n % 2 == 0){
return n / 2;
}else{
return ((3 * n) + 1)/2;
}
}
int main(){
int a,i;
i = 0;
scanf("%d",&a);
while(a != 1){
a = divide(a);
i++;
}
printf("%d\n",i);
return 0;
}
複制
挖掘機技術哪家強
#include<cstdio>
int N = 0;
//這裡的N會不會在main函數裡面再建立一個副本,如果其他函數要用是否需要傳出來?
int num;
int scr;
int sum[10];
int MAX_num = -1;
int MAX_sum = -1;
void plus(int N){
for(int i = 0; i < N; i++){
scanf("%d %d",&num,&scr);
sum[num] += scr;
}
for(int i = 0;i < N; i++){
if(sum[i]>MAX_sum){
MAX_sum = sum[i];
MAX_num = i;
}
}
printf("%d %d",MAX_num,MAX_sum);
}
int main(){
scanf("%d",&N);
plus(N);
return 0;
}
複制
A+B和C
#include<cstdio>
typedef long long LL;
LL a = 0,b = 0,c = 0;
int T;
void func(){
scanf("%d",&T);
while(T>0&&T<=10){
for(int i = 0; i < T; i++){
scanf("%d%d%d",&a,&b,&c);
if(a+b>c) printf("Case #%d:true",T);
else printf("Case #%d:false",T);
}
}
}
int main(){
func();
return 0;
}
複制
A+B and C(64Bit)
#include<cstdio>
typedef long long int LL;
void func(){
int T,tcase=1;
scanf("%d",&T);
while(T--){
LL a ,b ,c;
scanf("%lld%lld%lld",&a,&b,&c);
//注意資料類型對應,這裡的%lld對應long long int,而不應該是%d
LL sum = a+b;
//這裡要設定一個sum來記錄a+b的值,直接放在if會産生錯誤(為何?)
bool flag=0;
if(a<0&&b<0&&sum>=0) flag = false;
else if(a>0&&b>0&&sum<=0) flag = true;
else if(sum>c) flag=1;
else flag =0;
if(flag == 1){
printf("Case #%d: true\n",tcase++);
}else{
printf("Case #%d: false\n",tcase++);
}
}
}
int main(){
func();
return 0;
}
複制
部分A+B
#include<cstdio>
// 擷取正整數n的(x)部分
int cal(int n, int x)
{
int digit;
int ret = 0;
while (n > 0){
digit = n % 10;
if (digit == x){
ret = ret*10 + digit;
}
n /= 10;
}
return ret;
}
int main(){
int a,pa,b,pb;
scanf("%d%d%d%d",&a,&pa,&b,&pb);
printf("%d\n",cal(a,pa)+cal(b,pb));
return 0;
}
複制
#include <stdio.h>
void func(){
int C1=0,C2=0;
scanf("%d%d",&a,&b);
//注意加上&
int sub = ((C2 - C1) + 50) / 100;
//先給(b-a)加上50,這樣如果(b-a)/100的小數位大于等于0.5則會進位,小于等于0.5則會舍去
int hh = sub / 3600;
sub = sub % 3600;//此時将n % 3600即為剩下的分鐘和秒數
int mm = sub / 60, ss = sub % 60;
printf("%02d:%02d:%02d", hh, mm, ss);
//用printf的%02d格式自動為不足2位的整數在前面補上0
}
int main() {
func();
return 0;
}
複制
劃拳
#include<cstdio>
void func(){
int lose_account_jia = 0, lose_account_yi = 0;
int head_jia = 0, head_yi = 0;
int speak_jia = 0, speak_yi = 0;
int n;
scanf("%d",&n);
while(n--){
scanf("%d%d%d%d", &speak_jia, &head_jia, &speak_yi, &head_yi);
if(head_jia == speak_jia+speak_yi&&head_yi!= speak_jia+speak_yi){
lose_account_yi++;
}else if(head_jia != speak_jia+speak_yi&&head_yi== speak_jia+speak_yi){
lose_account_jia++;
}
}
printf("%d %d\n",lose_account_jia,lose_account_yi);
}
int main(){
func();
return 0;
}
複制
數組元素循環右移問題
#include <stdio.h>
#define MAXN 100
int main() {
int n, m, num[MAXN * 2], i, temp;
scanf("%d %d", &n, &m);
for (i = 0; i < n; i++) {
scanf("%d", &num[i]);
}
m %= n;
for (i = n + m - 1; i > m - 1; i--) {
num[i] = num[i - m];
}
for (i = 0; i <= m - 1; i++) {
num[i] = num[n + i];
}
for (i = 0; i < n; i++) {
if (i == 0) {
printf("%d", num[i]);
}
else {
printf(" %d", num[i]);
}
}
printf("\n");
return 0;
}
複制
本題還可以使用STL解決,即使用reverse()函數
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n,m;
cin >> n >> m;
if(m > n)
m -=n;
vector<int> arr(n);
for(int i=0; i<n; i++){
int temp;
cin >> temp;
arr[i] = temp;
}
reverse(arr.begin(),arr.end());
reverse(arr.begin(),arr.begin()+m);//從數組開頭查m個元素轉換順序
reverse(arr.begin()+m,arr.end());//從數組第m+1個元素到數組末尾轉換順序,arr.end()可以寫成arr.begin()+n
for(int j=0; j<n; j++){
if(j != 0)
cout << " ";
cout << arr[j];
}
return 0;
}
複制
數字分類
#include <stdio.h>
int main()
{
int num;
int A1 = 0, A2 = 0, A3 = 0, A4 = 0, A5 = 0;
int A2flag = 0, A4count = 0;
scanf("%d", &num);
for(int i = 0, n; i < num; i++)
{
scanf("%d", &n);
switch(n % 5)
{
case 0: A1 += n % 2 ? 0 : n; break;
case 1: A2flag = A2flag == 1 ? -1 : 1; A2 += A2flag * n; break;
case 2: A3 ++; break;
case 3: A4 += n; A4count ++; break;
case 4: A5 = n > A5? n : A5; break;
}
}
if(A1 == 0) printf("N "); else printf("%d ", A1);
if(A2flag == 0) printf("N "); else printf("%d ", A2);
if(A3 == 0) printf("N "); else printf("%d ", A3);
if(A4 == 0) printf("N "); else printf("%.1f ", A4 * 1.0 / A4count);
if(A5 == 0) printf("N"); else printf("%d", A5);
return 0;
}
複制
這題也可以用STL解決部分問題。
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
using namespace std;
#define MAX_STR_LENS 4000
int main()
{
int N = 0,i = 0, data = 0;
int A1 = 0, A2 = 0, A3 = 0, A4outs = 0, A5 = 0;
double A4 = 0;
vector<int> vecA2; //屬于A2的所有資料
cin >> N;
for(i = 0; i < N; i++)
{
cin >> data;
/* 判斷是否是屬于A1 */
if (data % 5 == 0 && data % 2 == 0) A1 += data;
/* 判斷是否是屬于A2 */
if (data % 5 == 1) vecA2.push_back(data);
/* 判斷是否是屬于A3 */
if (data % 5 == 2) A3++;
/* 判斷是否是屬于A4 */
if (data % 5 == 3){
A4 += data;
A4outs++;
}
/* 判斷是否是屬于A5 */
if (data % 5 == 4) A5 = max(A5,data);
}
/*輸出 */
if (A1 == 0) cout << "N";
else cout << A1;
if(vecA2.empty()) cout << " N";
else
{
for(i = 0; i < vecA2.size(); i++)
{
A2 = A2 + pow(-1,i) * vecA2[i];
//pow():計算-1的i次方
}
cout << " " << A2;
}
if (A3 == 0) cout << " N";
else cout << " " << A3;
if (A4outs == 0) cout << " N";
else printf(" %.1f",A4/A4outs);
if (A5 == 0) cout << " N" << endl;
else cout << " " << A5 << endl;
return 0;
}
複制
錘子剪子布
C++的寫法
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int jia_win = 0, yi_win = 0;
int jia[3] = {0}, yi[3] = {0};
for (int i = 1; i <= n; i++) {
char j,y;
cin >> j >> y;
if (j == 'C' && y == 'J') {
jia_win++;
jia[0]++;
} else if (j == 'J' && y == 'C') {
yi_win++;
yi[0]++;
} else if (j == 'J' && y == 'B') {
jia_win++;
jia[1]++;
} else if (j == 'B' && y == 'J') {
yi_win++;
yi[1]++;
} else if (j == 'B' && y == 'C') {
jia_win++;
jia[2]++;
} else if (j == 'C' && y == 'B') {
yi_win++;
yi[2]++;
}
}
cout << jia_win << " " << n - jia_win - yi_win << " " << yi_win << endl << yi_win << " " << n - jia_win - yi_win << " " << jia_win << endl;
int max_jia = -1;
for(int i = 0; i < 3; i++){
if(jia[i] > max_jia){
max_jia = i;
}
}
if(max_jia == 0) cout<<"C";
else if(max_jia == 1) cout<<"J";
else if(max_jia == 2) cout<<"B";
int max_yi = -1;
for(int i = 0; i < 3; i++){
if(yi[i] > max_yi){
max_yi = i;
}
}
if(max_jia == 0) cout<<" "<<"C";
else if(max_jia == 1) cout<<" "<<"J";
else if(max_jia == 2) cout<<" "<<"B";
return 0;
}
複制
C語言的寫法(不知字元那裡該怎麼改,總是才輸入5行左右就異常,下次再看)(挖坑,待解決)
#include <stdio.h>
int main() {
int n;
scanf("%d",&n);
int jia_win = 0, yi_win = 0;
int jia[3] = {0}, yi[3] = {0};
for (int i = 0; i < n; i++) {
char j, y;
scanf("%c%c",&j,&y);
if (j == 'C' && y == 'J') {
jia_win++;
jia[1]++;
} else if (j == 'J' && y == 'C') {
yi_win++;
yi[1]++;
} else if (j == 'J' && y == 'B') {
jia_win++;
jia[2]++;
} else if (j == 'B' && y == 'J') {
yi_win++;
yi[2]++;
} else if (j == 'B' && y == 'C') {
jia_win++;
jia[0]++;
} else if (j == 'C' && y == 'B') {
yi_win++;
yi[0]++;
}
}
printf("%d %d %d\n%d %d %d",jia_win, n - jia_win - yi_win, yi_win, yi_win, n - jia_win - yi_win, jia_win);
/*
int max_jia = -1;
for(int i = 0; i < 3; i++){
if(jia[i] > max_jia){
max_jia = i;
}
}
if(max_jia == 0) cout<<"C";
else if(max_jia == 1) cout<<"J";
else if(max_jia == 2) cout<<"B";
int max_yi = -1;
for(int i = 0; i < 3; i++){
if(yi[i] > max_yi){
max_yi = i;
}
}
if(max_jia == 0) cout<<" "<<"C";
else if(max_jia == 1) cout<<" "<<"J";
else if(max_jia == 2) cout<<" "<<"B";
return 0;
*/
return 0;
}
複制
Shuffling Machine
#include<cstdio>
const int N = 54;
char mp[5]={'S','H','C','D','J'};
int start[N+1], end[N+1], next[N+1];
int main(){
int K;
scanf("%d",&K);
for(int i = 1; i <= N; i++){
start[i] = i;
}
for(int i = 1; i <= N; i++){
scanf("%d",&next[i]);
}
for(int step = 0; step < k; step++){
for(int i = 1; i <= N; i++){
end[next[i]]=start[i];
}
for(int i = 1; i <= N; i++){
start[i]=end[i];
}
}
for(int i = 1; i <= N; i++){
if(i != 1) printf(" ");
printf("%c%d", mp[start[i]]/13, start[i]%13+1);
}
}
複制
Shortest Distance

一進制多項式求導
自己寫的代碼:
#include<cstdio>
int main(){
int k,e,count=0,account=0;
while(scanf("%d%d",&k,&e)!=EOF){
account++;
if(e>=1){
k*=e;
e--;
count++;
}else if(e=0){
k=0;
e--;
count++;
//注意:這裡對函數的求導也不要寫在while...EOF裡面,因為題目給的輸入樣例是一行直接輸入完畢的,沒辦法判斷結束的标志(輸入樣例沒給n)
//注意:正是因為題目給的輸入樣例是一行直接輸入完畢的,是以最好開一個數組來存儲系數,其下标為指數,同時注意指數和數組下标的對應關系。
}
if(account=1){printf("%d %d",k,e);}
else if(account>1){printf(" %d %d",k,e);}
}
if(count=0){printf("0 0");}
return 0;
}
複制
這是算法書給的代碼:
#include<cstdio>
int main(){
int a[1010]={0};
int k,e,count=0;
while(scanf("%d,%d",&k,&e)!=EOF){
a[e]=k;
}
a[0]=0;
for(int i=1;i<=1000;i++){
a[i-1]=a[i]*i;
a[i]=0;//這一步歸零,因為原來a[i]已經*i并指派給a[i-1]了
if(a[i-1]!=0) count++;
}
if(count==0) printf("0 0");
else{
for(int i=1000;i>=0;i--){
if(a[i]!=0){
printf("%d %d",a[i],i);
count--;
if(count!=0) printf(" ");
}
}
}
return 0;
}
複制
A+B for Polynomials
#include<cstdio>
int main(){
float c[1001] = {0};
int m, n, t;
float num;
scanf("%d", &m);
for (int i = 0; i < m; i++) {
scanf("%d%f", &t, &num);//對于double類型,scanf是%f,printf是&lf
c[t] += num;
}
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d%f", &t, &num);
c[t] += num;
}
int cnt = 0;
for (int i = 0; i < 1001; i++) {
if (c[i] != 0) cnt++;
}
printf("%d", cnt);
for (int i = 1000; i >= 0; i--) {
if (c[i] != 0.0)
printf(" %d %.1f", i, c[i]);
}
return 0;
}
複制
Product of Polynomials
(挖坑,待解決)
#include<cstdio>
int main(){
int n1, n2, a, cnt = 0;
scanf("%d", &n1);
double b, arr[1001] = {0.0}, ans[2001] = {0.0};//arr儲存第一行資料,ans儲存結果
for(int i = 0; i < n1; i++) {
scanf("%d %lf", &a, &b);
arr[a] = b;
}
scanf("%d", &n2);
for(int i = 0; i < n2; i++) {
scanf("%d %lf", &a, &b);
for(int j = 0; j < 1001; j++)
ans[j + a] += arr[j] * b;
}
for(int i = 2000; i >= 0; i--)
if(ans[i] != 0.0) cnt++;
printf("%d", cnt);
for(int i = 2000; i >= 0; i--)
if(ans[i] != 0.0)
printf(" %d %.1f", i, ans[i]);
return 0;
}
複制
版權所有:可定部落格 © WNAG.COM.CN
本文标題:《簡單模拟答案》
本文連結:https://wnag.com.cn/934.html
特别聲明:除特别标注,本站文章均為原創,本站文章原則上禁止轉載,如确實要轉載,請電聯:[email protected],尊重他人勞動成果,謝過~