مقدمات برنامه نویسی با ++C

vector

کاربر فعال
ارسال‌ها
25
امتیاز
79
نام مرکز سمپاد
دبیرستان علّامه حلی
شهر
تهران
مدال المپیاد
کامپیوتر
پاسخ : مقدمات برنامه نویسی با ++C

به نقل از Daneshvar :
میشه بگید از کدوم define ها و include ها در این برنامه استفاده شده است؟
فقط string و iostream
خو عزیز این یک سوال بدیهی بود :) ، ولی سوالای سخت تر که ایده های جالب تر دارن ، برا آسون تر شدنشون خیلی چیزا لازم میشه !
آدم همه اینا رو include میکنه که براش وقت گیر نشه در آینده اگه نیازش بود !
 

daneshvar.amrollahi

کاربر حرفه‌ای
ارسال‌ها
327
امتیاز
130
نام مرکز سمپاد
راهنمایی حلی۲/دبیرستان حلی۱۰/دبیرستان علامه طباطبایی
شهر
تهران
سال فارغ التحصیلی
1397
مدال المپیاد
کامپیوتر
پاسخ : مقدمات برنامه نویسی با ++C

به نقل از vector :
فقط string و iostream
خو عزیز این یک سوال بدیهی بود :) ، ولی سوالای سخت تر که ایده های جالب تر دارن ، برا آسون تر شدنشون خیلی چیزا لازم میشه !
آدم همه اینا رو include میکنه که براش وقت گیر نشه در آینده اگه نیازش بود !

اوکی ممنون. بهره بردیم! :لایک
 

daneshvar.amrollahi

کاربر حرفه‌ای
ارسال‌ها
327
امتیاز
130
نام مرکز سمپاد
راهنمایی حلی۲/دبیرستان حلی۱۰/دبیرستان علامه طباطبایی
شهر
تهران
سال فارغ التحصیلی
1397
مدال المپیاد
کامپیوتر
پاسخ : مقدمات برنامه نویسی با ++C

این برنامه قراره هرگاه قرینه ی یک عددی بعد از همان عدد آمده بود، اعلام کنه بله یا نه. قراره خط اول ورودی t باشه که قراره t بار تست کنه. اولین عدد هر خط میگه که چند تا عدد هستش. برای مثال به صورت زیر هستند و کنار هم وارد می شوند.
1 1 -2 1- 1 2 3 4 4- 1
به طور مثال باید برای مورد دوم بله اعلام کنه چون که 1- بعد از 1 اومده. در مورد دوم عدد 2 میگه که قراره دو تا عدد بعدش بیاد(1- 1)
اینم کدش. نمی دونم کجا اشکال داره. کسی میتونه راهنمایی کنه؟
کد:
#include<iostream>
#include<conio.h>
#include<fstream>

using namespace std;

ifstream fin("input.txt");
ofstream fout("output.txt");

int main()
{
    int t,x,n;
    fin>>t;
    
    for (int i=0;i<t;i++)
    {
        fin>>n;
        int a[n+1];
        
        for (int j=1;j<=n;j++)
        fin>>a[j];
        
        for (int k=1;k<=n;k++) 
        {
             if ( (a[k+1]-a[k] == a[k]-2*a[k]) )
             {
                 fout<<"BALE";
                 break;
             } 
             else
             {
              if (k==n)
              fout<<"NA";
             }
        } 
        
        fout<<endl;
    } 
    
     return 0;
}
 

vector

کاربر فعال
ارسال‌ها
25
امتیاز
79
نام مرکز سمپاد
دبیرستان علّامه حلی
شهر
تهران
مدال المپیاد
کامپیوتر
پاسخ : مقدمات برنامه نویسی با ++C

به نقل از Daneshvar :
این برنامه قراره هرگاه قرینه ی یک عددی بعد از همان عدد آمده بود، اعلام کنه بله یا نه. قراره خط اول ورودی t باشه که قراره t بار تست کنه. اولین عدد هر خط میگه که چند تا عدد هستش. برای مثال به صورت زیر هستند و کنار هم وارد می شوند.
1 1 -2 1- 1 2 3 4 4- 1
به طور مثال باید برای مورد دوم بله اعلام کنه چون که 1- بعد از 1 اومده. در مورد دوم عدد 2 میگه که قراره دو تا عدد بعدش بیاد(1- 1)
اینم کدش. نمی دونم کجا اشکال داره. کسی میتونه راهنمایی کنه؟
کد:
#include<iostream>
#include<conio.h>
#include<fstream>

using namespace std;

ifstream fin("input.txt");
ofstream fout("output.txt");

int main()
{
    int t,x,n;
    fin>>t;
    
    for (int i=0;i<t;i++)
    {
        fin>>n;
        int a[n+1];
        
        for (int j=1;j<=n;j++)
        fin>>a[j];
        
        for (int k=1;k<=n;k++) 
        {
             if ( (a[k+1]-a[k] == a[k]-2*a[k]) )
             {
                 fout<<"BALE";
                 break;
             } 
             else
             {
              if (k==n)
              fout<<"NA";
             }
        } 
        
        fout<<endl;
    } 
    
     return 0;
}
سوال میپرسی واضح بگو ، با مثال توضیح نده که سوال رو
اگه سواله بیانه میتونی PDF سوال رو دانلود کنی. دانلود کن و آپلود کنه برام
 

rezaezio

کاربر فوق‌حرفه‌ای
ارسال‌ها
1,167
امتیاز
1,956
نام مرکز سمپاد
حلّیِ 2
شهر
تهران
مدال المپیاد
برنز و طلای کامپیوتر !
دانشگاه
شریف
رشته دانشگاه
نرم افزار
پاسخ : مقدمات برنامه نویسی با ++C

نمیدونم چرا اینقدر سخت فکر می کنی !!

بیا این کدِ درستش :
کد:
#include<iostream>
#include<conio.h>
#include<fstream>

using namespace std;

ifstream fin("input.txt");
ofstream fout("output.txt");

int main()
{
    int t,x,n;
    fin>>t;
    
    for (int i=0;i<t;i++)
    {
        fin>>n;
        int a[n+1];
        
        for (int j=1;j<=n;j++)
        fin>>a[j];
        
        for (int k=1;k<n;k++) 
        {
             if ( (a[k]==a[k+1]*-1) ) // Inja kharab bood !!
             {
                 fout<<"BALE";
                 break;
             } 
             else
             {
              if (k==n-1)
              fout<<"NA";
             }
        } 
        
        fout<<endl;
    } 
    
     return 0;
}
اونجا که چک می کردی ، یه عدد با عدد بعدیش قرینه هست یا نه ، رو اشتباه گذاشته بودی !! توی کد توضیحات گذاشتم که کجا رو غلط نوشتی
 

daneshvar.amrollahi

کاربر حرفه‌ای
ارسال‌ها
327
امتیاز
130
نام مرکز سمپاد
راهنمایی حلی۲/دبیرستان حلی۱۰/دبیرستان علامه طباطبایی
شهر
تهران
سال فارغ التحصیلی
1397
مدال المپیاد
کامپیوتر
پاسخ : مقدمات برنامه نویسی با ++C

به نقل از vector :
سوال میپرسی واضح بگو ، با مثال توضیح نده که سوال رو
اگه سواله بیانه میتونی PDF سوال رو دانلود کنی. دانلود کن و آپلود کنه برام

لینک PDF سوال:


http://www.mediafire.com/view/rf5hclrx2fzctxw/All_Problems.pdf


باید سوال نماد مرغوب رو بخونید
lممنون
 

daneshvar.amrollahi

کاربر حرفه‌ای
ارسال‌ها
327
امتیاز
130
نام مرکز سمپاد
راهنمایی حلی۲/دبیرستان حلی۱۰/دبیرستان علامه طباطبایی
شهر
تهران
سال فارغ التحصیلی
1397
مدال المپیاد
کامپیوتر
پاسخ : مقدمات برنامه نویسی با ++C

به نقل از Dant3 :
نمیدونم چرا اینقدر سخت فکر می کنی !!

بیا این کدِ درستش :
کد:
#include<iostream>
#include<conio.h>
#include<fstream>

using namespace std;

ifstream fin("input.txt");
ofstream fout("output.txt");

int main()
{
    int t,x,n;
    fin>>t;
    
    for (int i=0;i<t;i++)
    {
        fin>>n;
        int a[n+1];
        
        for (int j=1;j<=n;j++)
        fin>>a[j];
        
        for (int k=1;k<n;k++) 
        {
             if ( (a[k]==a[k+1]*-1) ) // Inja kharab bood !!
             {
                 fout<<"BALE";
                 break;
             } 
             else
             {
              if (k==n-1)
              fout<<"NA";
             }
        } 
        
        fout<<endl;
    } 
    
     return 0;
}
اونجا که چک می کردی ، یه عدد با عدد بعدیش قرینه هست یا نه ، رو اشتباه گذاشته بودی !! توی کد توضیحات گذاشتم که کجا رو غلط نوشتی

عوضش کردم ولی هنوز درست کار نمی کنه. فکر کنم کلاً مشکل از الگوریتمه :-??
 

rezaezio

کاربر فوق‌حرفه‌ای
ارسال‌ها
1,167
امتیاز
1,956
نام مرکز سمپاد
حلّیِ 2
شهر
تهران
مدال المپیاد
برنز و طلای کامپیوتر !
دانشگاه
شریف
رشته دانشگاه
نرم افزار
پاسخ : مقدمات برنامه نویسی با ++C

حاجی سوال رو اشتباه فهمیدی !! دوباره بخون. :|

میگه اگه یه عدد بیاد کنار قرینش ، این دو تا عدد با هم ناپدید میشن !! حالا بگید آخرش عددی میمونه یا نه .
 

vector

کاربر فعال
ارسال‌ها
25
امتیاز
79
نام مرکز سمپاد
دبیرستان علّامه حلی
شهر
تهران
مدال المپیاد
کامپیوتر
پاسخ : مقدمات برنامه نویسی با ++C

مشکلت اینه اشتباه سوال رو میفهمی ! :)

برا توضیحی که دادی مثال نقض بیارم ؟ همین سومین Sample خودش مثال نقضی هست که گفتی :D

کد:
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cctype>
#include <algorithm>
#include <iomanip>
#include <sstream>
#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <deque>
#include <stack>
#include <utility>

using namespace std;

#define FOR(i,a,b) for (int i = (a); i < (int)(b); ++i)
#define FOREACH(i,c) for (__typeof(c.begin()) i = c.begin(); i != c.end(); ++i)

typedef long long int64;

vector <int> v;
int a[55];

int main () {
	freopen ("in.txt", "r", stdin);
	freopen ("out.txt", "w", stdout);
	int T;
	for (cin >> T; T--;) {
		v.clear();
		int n;
		cin >> n;
		FOR (i, 0, n)
			cin >> a[i];
		v.push_back(a[0]);
		FOR (i, 1, n) {
			if (!v.empty()) {
				if (a[i] < 0 && (a[i] * -1) == v.back())
					v.pop_back();
				else
					v.push_back(a[i]);
			}
			else
				v.push_back(a[i]);
		}
		if (v.size() == 0)
			puts ("BALE");
		else
			puts ("NA");
	}
        return 0;
}
کد درستش اینه.
 

daneshvar.amrollahi

کاربر حرفه‌ای
ارسال‌ها
327
امتیاز
130
نام مرکز سمپاد
راهنمایی حلی۲/دبیرستان حلی۱۰/دبیرستان علامه طباطبایی
شهر
تهران
سال فارغ التحصیلی
1397
مدال المپیاد
کامپیوتر
پاسخ : مقدمات برنامه نویسی با ++C

میشه یه کم درباره کدتون توضیح بدین یا یه کد ساده تر بنویسین؟ الان این چیزی که نویشتین چیکار می کنه؟
دارین هر وقت قرینه دیدین دو تا رو از آرایه حذف می کنید؟ برای حذفش از دستور []delete arrayname استفاده کرد؟ آیا باید include خاصی اون بالا نوشته بشه؟
 

vector

کاربر فعال
ارسال‌ها
25
امتیاز
79
نام مرکز سمپاد
دبیرستان علّامه حلی
شهر
تهران
مدال المپیاد
کامپیوتر
پاسخ : مقدمات برنامه نویسی با ++C

به نقل از Daneshvar :
میشه یه کم درباره کدتون توضیح بدین یا یه کد ساده تر بنویسین؟ الان این چیزی که نویشتین چیکار می کنه؟
دارین هر وقت قرینه دیدین دو تا رو از آرایه حذف می کنید؟ برای حذفش از دستور []delete arrayname استفاده کرد؟ آیا باید include خاصی اون بالا نوشته بشه؟
خوب بزار بگم که کد من خیلی سادس ! شما یکم دانش برنامه نویسی‌ت کمه به خاطر همین ممکنه متوجه نشی
بهت پیشنهاد میکنم حتما vector رو یاد بگیر چون خیلی به دردت میخوره.
توی کدمم هم کار خاصی نکردم :) فقط اومدم چک کردم که این آجرهایی که قراره روی هم دیگه گذاشته بشه ، مثل شرط مسئله هست یا نه.
توی این قسمت
کد:
v.push_back(a[0]);
اومدم اولین آجر رو گذاشتم رو زمین.
توی این قسمت شروع میکنم بقیه آجر هایی رو که برام مونده میزارم و شرط مسئله رو چک میکنم
کد:
FOR (i, 1, n)
توی این قسمت چک میکنم که آیا هنوز آجری روی زمین دارم یا ندارم (۱) :
کد:
if (!v.empty())
توی این چند خط میام برای هر آجر جنسش رو تشخیص میدم که نامرغوبه یا خیلی نامرغوب و اگه رویی ترین آجری که دارم نامرغوب باشه و آجری که انتخاب کردم و تو دستمه خیلی نامرغوب باشه ، اون ۲ تا آجر رو میریزم دور.
کد:
if (a[i] < 0 && (a[i] * -1) == v.back())
					v.pop_back();
				else
					v.push_back(a[i]);

(۱) : تو این قسمت میام میگم اگه آجری رو زمین نبود و من هنوز آجر داشتم ، میام آجری که تو دسمه رو میزارم رو زمین.
کد:
else
				v.push_back(a[i]);

تو این قسمت هم چک میکنم آیا همه آجر ها از بین رفتن یا نه :)
کد:
		if (v.size() == 0)
			puts ("BALE");
		else
			puts ("NA");
راستی برای استفاده از vector دستور
کد:
#include <vector>
یادت نره.
 

daneshvar.amrollahi

کاربر حرفه‌ای
ارسال‌ها
327
امتیاز
130
نام مرکز سمپاد
راهنمایی حلی۲/دبیرستان حلی۱۰/دبیرستان علامه طباطبایی
شهر
تهران
سال فارغ التحصیلی
1397
مدال المپیاد
کامپیوتر
پاسخ : مقدمات برنامه نویسی با ++C

الگوریتمش رو متوجه شدم ممنون. باید برم کار با vector رو یاد بگیرم.
خیلی ممنون
 

mahdibam

کاربر فعال
ارسال‌ها
60
امتیاز
35
نام مرکز سمپاد
علامه حلي بم
شهر
بم
مدال المپیاد
كامپيوتر رتبه 1و4و5 كشوري - كامپيوتر 1 قطب - رياضي 11 كشوري
دانشگاه
آسوشیتد آنیورسیتی !
رشته دانشگاه
تجربی
آموزش ++C در 11 بخش

يه سر به وبلاگ : http://c-hellibam.blogfa.com بزنين بطور خلاصه توضيح داده.
 

TheBest444

کاربر فوق‌فعال
ارسال‌ها
89
امتیاز
73
نام مرکز سمپاد
حلی3_علامه طباطبایی ادونس
شهر
طهران
رشته دانشگاه
فیزیک نوین _ علوم کامپیوتر
پاسخ : مقدمات برنامه نویسی با ++C

یه سوال: کدی رو بزنید که اعداد 1 تا 100 که اعداد مقلوب (عدد مقلوب = برعکس )رو در صورتی که با خود عدد برابر نباشه و همچنین هر دو عدد اول باشن(مثل 13 و31) رو چاپ کنه.

اگه میشه به ساده ترین صورتی که میتونید بنویسید.(tnx :-" )
 

merzat

کاربر فوق‌فعال
ارسال‌ها
154
امتیاز
201
نام مرکز سمپاد
کرج
شهر
کرج
سال فارغ التحصیلی
1387
مدال المپیاد
المپیاد ریاضی و کامپیوتر
رشته دانشگاه
هوافضا
پاسخ : مقدمات برنامه نویسی با ++C

به نقل از TheBest444 :
یه سوال: کدی رو بزنید که اعداد 1 تا 100 که اعداد مقلوب (عدد مقلوب = برعکس )رو در صورتی که با خود عدد برابر نباشه و همچنین هر دو عدد اول باشن(مثل 13 و31) رو چاپ کنه.

اگه میشه به ساده ترین صورتی که میتونید بنویسید.(tnx :-" )
کد:
#include <iostream>
using namespace std;

int main(int argc, char** argv) {
	int num,i,c,m,n;
	cout<<"Enter maximum number: ";
	cin >> num;
	for (int i=2; i<=num; i++){
	bool isprime=true;
	n=i;
	m=0;
	while (n>0)
	{
		m = (m*10) + (n%10);
		n = n/10;
	}
	n=i;
	for(c=2;c*c<=i;c++)
	{
		if(i%c==0)
		{
		 isprime=false;
		 break;
		}
	}
	for(c=2;c*c<=m;c++)
	{
		if(m%c==0)
		{
		 isprime=false;
		 break;
		}
	}
	if((isprime==true)&&(i!=m))
	{
		cout<<"Number "<<n<<" and "<<m<<" is prime\n";
	}
	}
	system("pause");
	return 0;
}

اینم ساده ترین حالتش...
 

f@him

کاربر حرفه‌ای
ارسال‌ها
493
امتیاز
23,592
نام مرکز سمپاد
فاتح
شهر
مشهد
سال فارغ التحصیلی
94
دانشگاه
شریف
رشته دانشگاه
IT
پاسخ : مقدمات برنامه نویسی با ++C

http://s3.picofile.com/file/8204732368/Capture.JPG.
الان مشکل این چیه؟؟
من خیلی مبتدیم:D
 

Saeid1997

کاربر فوق‌فعال
ارسال‌ها
85
امتیاز
210
نام مرکز سمپاد
شهيد صدوقى
شهر
يزد
سال فارغ التحصیلی
94
دانشگاه
شریف
رشته دانشگاه
هوافضا
پاسخ : مقدمات برنامه نویسی با ++C

اینم یه تمرین

برنامه ای بنویسید که یک عدد از کاربر گرفته و به مقسوم الیه هایش تجزیه کند و به این صورت نمایش دهد .
a^2 * b^3 و ...
 
بالا